【问题标题】:merging 2 dataframes vertically [duplicate]垂直合并2个数据框[重复]
【发布时间】:2017-05-02 02:18:01
【问题描述】:

我有 2 个数据框,每个数据框有 2 列(相同的列名)。我想将它们垂直合并以最终获得一个新的数据框。

做的时候

newdf = df.merge(df1,how='left',on=['Col1','Col2'])

新的 df 仅包含来自 df 的行,而没有来自 df1 的行。发生这种情况的任何原因?

Col1    Col2
asd     1232
cac     2324
.....

df1 是:

Col1    Col2
afaf    1213
asas    4353

新的数据框newdf 应该是:

Col1   Col2
asd     1232
cac     2324
afaf    1213
asas    4353

【问题讨论】:

  • 你要pd.concat([df1,df2]),这是一个很常见的问题,见docs,相关:stackoverflow.com/questions/11637384/…stackoverflow.com/questions/15819050/…
  • 我忘了说concat返回:TypeError: first argument must be an iterable of pandas objects, you pass a object of type "DataFrame"
  • 当您传递how='left' 时,这只会水平合并lhs 上那些列中的值,不清楚您真正想要什么。您可以尝试传递“外部”

标签: python pandas merge


【解决方案1】:

如果您不想按原样使用索引值,可以使用appendignore_index

In [14]: df1.append(df2)
Out[14]:
   Col1  Col2
0   asd  1232
1   cac  2324
0  afaf  1213
1  asas  4353

In [15]: df1.append(df2, ignore_index=True)
Out[15]:
   Col1  Col2
0   asd  1232
1   cac  2324
2  afaf  1213
3  asas  4353

或使用pd.concat

In [16]: pd.concat([df1, df2])
Out[16]:
   Col1  Col2
0   asd  1232
1   cac  2324
0  afaf  1213
1  asas  4353

In [17]: pd.concat([df1, df2], ignore_index=True)
Out[17]:
   Col1  Col2
0   asd  1232
1   cac  2324
2  afaf  1213
3  asas  4353

【讨论】:

  • 追加比合并花费的时间更少。
  • 如果我想垂直连接两个以上的数据帧,我还能用这个吗?
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 2019-11-22
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
相关资源
最近更新 更多