这里我肯定漏掉了一些简单的东西,试图合并两个 Dataframe ,它们在Pandas中有几乎相同的列名,但是右边的 Dataframe 有一些左边没有的列,反之亦然。
>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在它们没有出现的地方。这看起来像是一个非常典型的数据处理工作流,但是我卡住了。
3条答案
按热度按时间uoifb46i1#
我认为在本例中
concat
就是您想要的:通过在这里传递
axis=0
,您将df堆叠在彼此的顶部,我相信这是您想要的,然后生成NaN
值,其中它们不在各自的df中。y53ybaqx2#
接受的答案将打破if there are duplicate headers:
无效索引错误:重新建立索引仅对值唯一的Index对象有效。
例如,这里
A
有3x个trial
列,这将防止concat
:要解决此问题,请在
concat
之前使用deduplicate the column names:或者作为一行程序,但可读性较差:
注意对于panda〈1.3.0,用途:
parser = pd.io.parsers.ParserBase({})
jk9hmnmh3#
今天我在使用concat、append或merge时遇到了这个问题,我通过添加一个按顺序编号的helper列,然后执行一个外部连接来解决这个问题