我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。
>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。这似乎是用于数据处理的非常典型的工作流程,但我遇到了麻烦。
提前致谢。
我认为在这种情况下concat,您想要的是:
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所没有的地方产生价值。
axis=0
NaN