【问题标题】:Concatenating Pandas DataFrames not as expected连接 Pandas DataFrames 不符合预期
【发布时间】:2013-08-03 20:34:38
【问题描述】:

我正在尝试将 3 列从一个数据帧附加到另一个数据帧的末尾,类似于以下内容:

    df1:
    a b c d
    1 1 4 1
    2 4 1 5

    df2[colsOfInterest]:
    e f
    3 5 
    1 1

使用 newDF = pd.concat([df1,df2[colsOfInterest]])

我期待:

    a b c d e f
    1 1 4 1 3 5
    2 4 1 5 1 1

但我得到了:

   a b c d e f
   1 1 4 1 NA NA 
   2 4 1 5 NA NA
   NA NA NA NA 3 5
   NA NA NA NA 1 1

更新: 虽然我无法发布我的数据帧,但我似乎已将其范围缩小到数据类型或一致性。如果我使用 to_csv 将两个 df 写入文件,然后使用 read_csv 将它们读回新文件,则 concat 过程可以正常工作。

其中一个是完全对象类型,另一个是 float64。

当重新读取它们时,它们变成了 float64、int64、object 的混合体。 如果我尝试获取原件,并通过 .astype(str).convert_numeric 将它们转换为数字类型,则类型与读取的版本匹配,但是 concat 仍然失败。

【问题讨论】:

  • 如果 @user1827356 的解决方案不起作用,请使用 df1 和 df2 终端的整个输出更新您的问题,即包括它们的索引。
  • 我展示的示例有效,但是我的(更大的)数据帧失败了。我将尝试发布一个失败的具体代表性案例。
  • @jzalger 原因可能是您的索引不匹配。正如安迪和 DSM 提到的那样使用 pd.concat([df1.reset_index(), df2[colsOfInterest].reset_index()], axis=1)

标签: python pandas


【解决方案1】:

这应该可以工作

pd.concat([df1, df2[colsOfInterest]], axis=1)

【讨论】:

  • 所有这似乎都是颠倒连接顺序(即:NA NA NA NA 3 5 而不是 1 1 4 1 NA NA
  • @jzalger 如果索引有问题,可以传递ignore_index=True。
  • @AndyHayden:我发现我必须明确指出 reset_index()-- ignore_index 没有做我认为的事情。
猜你喜欢
  • 2019-10-18
  • 2023-02-24
  • 2018-11-26
  • 2017-05-27
  • 2018-10-22
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
相关资源
最近更新 更多