Как я могу преобразовать три DataFrames a,b,c ниже в один DF со столбцами A,B,C,D?
Я специально хочу собрать несколько DataFrames в одну итерацию (dict / list of dicts), прежде чем воссоздавать их как один DF, а не добавлять или объединять их.
Моя попытка:
a=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
b=pd.DataFrame({'A':[7,8,9],'B':[10,11,12]})
c=pd.DataFrame({'B':[13,14,15],'C':[16,17,18],'D':[19,20,21]})
list_of_dicts=[] #can be list of lists/dicts
for i in [a, b, c]:
x=i.to_dict('split')
list_of_dicts.append(x)
pd.DataFrame.from_records(list_of_dicts)
# Решено ниже. Кредит Эрику Труетту.
import pandas as pd
import itertools
a=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
b=pd.DataFrame({'A':[7,8,9],'B':[10,11,12]})
c=pd.DataFrame({'B':[13,14,15],'C':[16,17,18]})
list_of_dicts=[]
for i in [a, b, c]:
x=i.to_dict('records')
list_of_dicts.append(x)
pd.DataFrame.from_records(list(itertools.chain.from_iterable(list_of_dicts)))
Ты сделал это. Очень признателен
@Kdog Итак, теперь это решено? Если это так, рассмотрите возможность публикации рабочего кода в качестве ответа для будущих гуглеров.






Чтобы создать единый фрейм данных из этих трех, вы можете использовать функцию concat() в пандах:
a=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
b=pd.DataFrame({'A':[7,8,9],'B':[10,11,12]})
c=pd.DataFrame({'B':[13,14,15],'C':[16,17,18],'D':[19,20,21]})
d = pd.concat([a, b, c])
print(d)
дам тебе:
A B C D
0 1.0 4 NaN NaN
1 2.0 5 NaN NaN
2 3.0 6 NaN NaN
0 7.0 10 NaN NaN
1 8.0 11 NaN NaN
2 9.0 12 NaN NaN
0 NaN 13 16.0 19.0
1 NaN 14 17.0 20.0
2 NaN 15 18.0 21.0
Я думаю, вы можете использовать функцию append для добавления нескольких объектов DataFrame. В приведенном ниже коде я инициализирую переменную s, которая будет использоваться для объединения всех a, b, cDataFrame.
import pandas as pd
a=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
b=pd.DataFrame({'A':[7,8,9],'B':[10,11,12]})
c=pd.DataFrame({'B':[13,14,15],'C':[16,17,18],'D':[19,20,21]})
list_of_dicts=[] #can be list of lists/dicts
s = pd.DataFrame()
for i in [a, b, c]:
s = s.append(i)
print(s)
Печать s даст следующий результат
A B C D
0 1.0 4 NaN NaN
1 2.0 5 NaN NaN
2 3.0 6 NaN NaN
0 7.0 10 NaN NaN
1 8.0 11 NaN NaN
2 9.0 12 NaN NaN
0 NaN 13 16.0 19.0
1 NaN 14 17.0 20.0
2 NaN 15 18.0 21.0
Что-то вроде этого должно работать, чтобы построить один dict из ваших 3 DataFrames.
import pandas as pd
a = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
b = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]})
c = pd.DataFrame({'B': [13, 14, 15], 'C': [16, 17, 18], 'D': [19, 20, 21]})
dfs = [a, b, c]
list_of_records = [record for records in [i.to_dict('records') for i in dfs] for record in records]
merged_records = {
k: [d.get(k) for d in list_of_records]
for k in set().union(*list_of_records)
}
print(merged_records)
out = pd.DataFrame().from_records(merged_records)
print(out)
Метод
to_dictфрейма данных создаст список dicts, если вы используете параметрrecords. Тогда вам просто нужно будет сложить три преобразованных фрейма данных вместе, чтобы составить один список, или вы можете использовать itertools.chain.from_iterable.