【问题标题】:How do I combine two dataframes?如何组合两个数据框?
【发布时间】:2012-10-02 18:06:07
【问题描述】:

我正在使用 Pandas 数据框。我有一个初始数据框,比如D。我像这样从中提取两个数据框:

A = D[D.label == k]
B = D[D.label != k]

我想将AB 组合起来,这样我就可以将它们作为一个DataFrame,类似于联合操作。数据的顺序并不重要。但是,当我们从D 中采样AB 时,它们会保留来自D 的索引。

【问题讨论】:

标签: python pandas


【解决方案1】:

相信你可以使用append方法

bigdata = data1.append(data2, ignore_index=True)

要保持索引,不要使用ignore_index 关键字...

【讨论】:

  • 这行得通。它虽然创建了一个新的 DataFrame。有没有办法内联?当我从数据库中批量加载大量数据时,这会很好,这样我就可以迭代更新 DataFrame 而无需每次都创建副本。
  • 是的,这是可能的,请参阅:stackoverflow.com/a/46661368/5717580
【解决方案2】:

您也可以使用pd.concat,这在您加入两个以上的数据框时特别有用:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

【讨论】:

  • 我想用这个,但我想连接两个同名的列 o_O
【解决方案3】:

想在这里添加它以防有人发现它有用。 @ostrokach 已经提到如何跨行合并数据帧,这是

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

要跨列合并,可以使用以下语法:

df_col_merged = pd.concat([df_a, df_b], axis=1)

【讨论】:

    【解决方案4】:

    如果您正在处理大数据并且需要连接多个数据集,多次调用concat 可能会占用大量性能。

    如果您不想每次都创建新的 df,则可以改为汇总更改并仅调用一次 concat

    frames = [df_A, df_B]  # Or perform operations on the DFs
    result = pd.concat(frames)
    

    这在本节底部concatenating objects 下的熊猫文档中指出):

    注意:但值得注意的是,concat(因此append) 制作数据的完整副本,并不断重用 功能可以产生显着的性能影响。如果您需要使用 对多个数据集的操作,使用列表推导。

    【讨论】:

    • 我认为应该有pd.concat(frames),因为pandas没有append方法。
    • 我并不完全理解列表中的“理解”重点。这里重要的不是每次都调用 append ,因此首先将所有数据帧收集到一个列表中。该列表是否通过列表理解建立完全无关紧要。
    • 感谢非常相关的 cmets,我更新了答案以解决他们。
    • process_file(f) 函数的预期定义是什么?
    • 这是一个示例,用于在连接它们之前对单个 DF 执行操作,但我发现它没有我最初想象的那么有用。更新答案,谢谢。
    【解决方案5】:

    如果您想用第二个数据帧df2 的值更新/替换第一个数据帧df1 的值。你可以按照以下步骤来做——

    第一步:设置第一个数据帧的索引(df1)

    df1.set_index('id')
    

    第二步:设置第二个数据帧的索引(df2)

    df2.set_index('id')
    

    最后使用下面的 sn-p 更新数据框——

    df1.update(df2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2021-11-23
      • 2011-10-06
      • 2022-11-13
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多