小编典典

pandas合并具有不同列的两个数据框

python

我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。

>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。这似乎是用于数据处理的非常典型的工作流程,但我遇到了麻烦。

提前致谢。


阅读 212

收藏
2020-12-20

共1个答案

小编典典

我认为在这种情况下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在它们各自的df所没有的地方产生价值。

2020-12-20