我有两个pandas.DataFrames
我希望合并为一个。数据框具有相同的列数,顺序相同,但列标题不同。如何有效地组合这些数据框?
df_ger
index Datum Zahl1 Zahl2
0 1-1-17 1 2
1 2-1-17 3 4
df_uk
index Date No1 No2
0 1-1-17 5 6
1 2-1-17 7 8
desired output
index Datum Zahl1 Zahl2
0 1-1-17 1 2
1 2-1-17 3 4
2 1-1-17 5 6
3 2-1-17 7 8
到目前为止,我提出的唯一方法是重命名列标题,然后使用pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
。但是,我希望找到一种更通用的方法。
答案 0 :(得分:2)
如果您可以确定两个数据帧的结构保持不变,我会看到两个选项:
保留所选默认语言的数据框列名称(我假设为en_GB)并将其复制过来:
df_ger.columns = df_uk.columns
df_combined = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
无论列名是什么,这都有效。但是,从技术上讲,它仍然是重命名。
使用numpy.ndarrays将数据从数据框中拉出来,将它们连接成numpy,并再次从中生成数据帧:
np_ger_data = df_ger.as_matrix()
np_uk_data = df_uk.as_matrix()
np_combined_data = numpy.concatenate([np_ger_data, np_uk_data], axis=0)
df_combined = pd.DataFrame(np_combined_data, columns=["Date", "No1", "No2"])
此解决方案需要更多资源,因此我会选择第一个。
答案 1 :(得分:0)
我不确定这是否会比你的想法更简单,但如果主要目标是一般性的话,那么这应该是一个假设:两个文件中的列匹配,例如,如果日期是第一列,翻译版本也将是第一列。
# number of columns
n_columns = len(df_ger.columns)
# save final columns names
columns = df_uk.columns
# rename both columns to numbers
df_ger.columns = range(n_columns)
df_uk.columns = range(n_columns)
# concat columns
df_out = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)
# rename columns in new dataframe
df_out.columns = columns