我肯定在这里遗漏了一些简单的东西。试图在大多数具有相同列名的pandas中合并两个数据帧,但是右边的数据框有一些左边没有的列,反之亦然。
>df_may
id quantity attr_1 attr_2
0 1 20 0 1
1 2 23 1 1
2 3 19 1 1
3 4 19 0 0
>df_jun
id quantity attr_1 attr_3
0 5 8 1 0
1 6 13 0 1
2 7 20 1 1
3 8 25 1 1
我尝试加入外部联接:
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer")
但是这会产生:
Left data columns not unique: Index([....
我还指定了一个要加入的列(on =" id",例如),但这会重复所有列,除了" id"比如attr_1_x,attr_1_y,这并不理想。我还将整个列列表(有很多列)传递给" on":
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer", on=list(df_may.columns.values))
哪个收益率:
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
我错过了什么?我希望获得一个附加了所有行的df,attr_1,attr_2,attr_3尽可能填充,NaN不会显示。这似乎是一个非常典型的数据调整工作流程,但我已经陷入困境。
提前致谢。
答案 0 :(得分:52)
我认为在这种情况下concat
就是你想要的:
In [12]:
pd.concat([df,df1], axis=0, ignore_index=True)
Out[12]:
attr_1 attr_2 attr_3 id quantity
0 0 1 NaN 1 20
1 1 1 NaN 2 23
2 1 1 NaN 3 19
3 0 0 NaN 4 19
4 1 NaN 0 5 8
5 0 NaN 1 6 13
6 1 NaN 1 7 20
7 1 NaN 1 8 25
在这里传递axis=0
,你将df堆叠在一起,我相信你想要的那样,然后产生NaN
值,它们不在各自的dfs中。< / p>
答案 1 :(得分:0)
今天我使用concat,append或merge中的任何一个来解决这个问题,我通过添加一个顺序编号的辅助列然后进行外连接来解决它
helper=1
for i in df1.index:
df1.loc[i,'helper']=helper
helper=helper+1
for i in df2.index:
df2.loc[i,'helper']=helper
helper=helper+1
df1.merge(df2,on='helper',how='outer')