一次追加多个 pandas 数据帧

Posted

技术标签:

【中文标题】一次追加多个 pandas 数据帧【英文标题】:Append multiple pandas data frames at once 【发布时间】:2016-07-31 07:00:46 【问题描述】:

我正在尝试找到一种方法来一次附加多个熊猫数据帧,而不是使用

逐个附加它们
df.append(df)

假设有 5 个 pandas 数据框 t1t2t3t4t5。我如何一次附加它们?相当于

df = rbind(t1,t2,t3,t4,t5)

【问题讨论】:

【参考方案1】:

我觉得你可以用concat:

print pd.concat([t1, t2, t3, t4, t5])

也许你可以ignore_index:

print pd.concat([t1, t2, t3, t4, t5], ignore_index=True)

docs 中的更多信息。

【讨论】:

如果你想让它们按某个值合并,比如说在第一列,你也可以这样做:pd.concat([t1, t2, t3, t4, t5], axis=1) pd.concat([t1, t2, t3, t4, t5], axis=0, ignore_index=True)【参考方案2】:

您是否尝试过使用列表作为附加参数?还是我错过了什么?

import numpy as np
import pandas as pd

dates = np.asarray(pd.date_range('1/1/2000', periods=8))
df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
df2 = df1.copy()
df3 = df1.copy()
df = df1.append([df2, df3])

print df

【讨论】:

还有一个对称解决方案:pd.DataFrame().append([df1,df2, df3]). 来自docs:“参数:其他:DataFrame 或 Series/dict-like 对象,或这些列表”(强调我的)【参考方案3】:

假设我们有一个主 Excel 文件,其中有 3 个子表,分别命名为 p1p2p3

我们可以如下一起阅读所有表格:

d = pd.read_excel('p1.xlsx',sheet_name=['p1','p2','p3'])

现在要将所有工作表合并到一个数据框中,我们可以使用以下内容:

df=pd.concat(d[frame] for frame in d.keys())

【讨论】:

【参考方案4】:

如果每个数据框的列不同,您可以添加为追加:

#list dataframe you want to append
frame = [t1, t2, t3, t4, t5]

#new dataframe to store append result
myDataFrame = pd.DataFrame()

for df in frame:
    myDataFrame = myDataFrame.append(df)

通过检查 myDataFrame 长度确保追加成功:

len(myDataFrame)

如果数据框中的所有列都相同,或者每个数据框的列不同,只要每个数据框的列数相同,您就可以使用 jezrael 提到的pd.concat(dataframe)

有关追加和连接的更多信息,请单击下面的链接: Merge, join, concatenate and compare in Pandas

【讨论】:

【参考方案5】:

#逐行追加

combined_data = pd.concat([t1, t2, t3, t4, t5], axis=0)

这会将一个数据帧堆叠在另一个数据帧上

#column 明智附加

combined_data = pd.concat([t1, t2, t3, t4, t5], axis=1)

这将在第一个数据帧的右侧附加第二个数据帧

【讨论】:

以上是关于一次追加多个 pandas 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 通过追加方式合并多个csv

Pandas HDFStore:当 min_itemsize 设置为字符串列的最大值时追加失败

pandas pytables 追加:性能和文件大小的增加

使用熊猫在数据框中追加一个空行

熊猫:追加行小计的新列

python 在数据帧追加新的列