如何在python pandas中组合两个数据框

MKo*_*sej 76 python pandas

我正在使用python pandas数据帧,我有一个初始数据帧说D.我从中提取两个数据帧,如下所示:

D

A

然后我改变A和B中的标签:

A = D[D.label == k]
B = D[D.label != k]
Run Code Online (Sandbox Code Playgroud)

B

我想结合A和B,所以我可以将它们作为一个像union这样的数据框.数据的顺序并不重要,但是当我们从D中对A和B进行采样时,它们会保留D的索引.

Jor*_*ley 113

我相信你可以使用这种append方法

bigdata = data1.append(data2, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

保持他们的索引不要使用ignore_index关键字...

  • 从“pandas v1.4.1”开始:“frame.append”方法已弃用,并将在未来版本中从 pandas 中删除。请改用“pandas.concat”。 (10认同)
  • 这有效。但它创建了一个新的 DataFrame。有没有办法内联完成?当我从数据库批量加载大量数据时,这会很好,这样我就可以迭代更新 DataFrame,而无需每次都创建副本。 (2认同)

ost*_*ach 73

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

bigdata = pd.concat([data1, data2], ignore_index=True, sort =False)
Run Code Online (Sandbox Code Playgroud)

  • 我想使用这个,但我试图连接两个同名的列 o_O (2认同)

pel*_*umi 34

想在这里添加这个,有人觉得它很有用.@ostrokach已经提到过如何跨行合并数据框

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

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

df_col_merged =pd.concat([df_a, df_b], axis=1)
Run Code Online (Sandbox Code Playgroud)


mar*_*tin 10

对于您正在处理大数据并需要连接多个数据集的情况,还有另一种解决方案.concat可以获得性能密集型,所以如果你不想每次都创建一个新的df,你可以使用列表理解:

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)
Run Code Online (Sandbox Code Playgroud)

(正如本节底部文档中所指出的那样):

注意:值得注意的是,concat(并因此append)制作数据的完整副本,并且不断重复使用此功能可能会产生重大的性能损失.如果需要对多个数据集使用该操作,请使用列表推导.

  • 我认为应该有“pd.concat(frames)”,因为 pandas 没有“append”方法。 (2认同)

Moh*_*ood 7

如果您想用第二个df1数据帧的值更新/替换第一个数据帧的值df2。您可以按照以下步骤进行操作 \xe2\x80\x94

\n\n

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

\n\n
df1.set_index('id')\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
df2.set_index('id')\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后使用以下代码段更新数据框 \xe2\x80\x94

\n\n
df1.update(df2)\n
Run Code Online (Sandbox Code Playgroud)\n