附加在 for 循环中生成的 pandas 数据帧

Posted

技术标签:

【中文标题】附加在 for 循环中生成的 pandas 数据帧【英文标题】:Appending pandas dataframes generated in a for loop 【发布时间】:2022-01-04 06:09:41 【问题描述】:

我正在 for 循环中访问一系列 Excel 文件。然后,我将 excel 文件中的数据读入 pandas 数据框。我不知道如何将这些数据框附加在一起,然后将数据框(现在包含所有文件中的数据)保存为新的 Excel 文件。

这是我尝试过的:

for infile in glob.glob("*.xlsx"):
    data = pandas.read_excel(infile)
    appended_data = pandas.DataFrame.append(data) # requires at least two arguments
appended_data.to_excel("appended.xlsx")

谢谢!

【问题讨论】:

【参考方案1】:

使用pd.concat 将DataFrame 列表合并为一个大DataFrame。

appended_data = []
for infile in glob.glob("*.xlsx"):
    data = pandas.read_excel(infile)
    # store DataFrame in list
    appended_data.append(data)
# see pd.concat documentation for more info
appended_data = pd.concat(appended_data)
# write DataFrame to an excel sheet 
appended_data.to_excel('appended.xlsx')

【讨论】:

太棒了,谢谢。您知道是否有一种简单的方法可以将每个 DataFrame 的标识符添加到最终的 excel 文件中?目的是能够跟踪数据来自哪个文件。 在读取数据时添加一个带有文件名的新列。可以像data['filename'] = infile 这样简单。 太棒了!谢谢一堆。如果将来有人想尝试这个,只需将] 替换为非上标 :) @FaCoffee ,从代码中删除axis=1 以绑定彼此下方的dfs。 :) 除非另有说明,否则我认为“附加”是指行,而不是列,建议从这个答案中删除 axis=1【参考方案2】:

你可以试试这个。

data_you_need=pd.DataFrame()
for infile in glob.glob("*.xlsx"):
    data = pandas.read_excel(infile)
    data_you_need=data_you_need.append(data,ignore_index=True)

希望对你有帮助。

【讨论】:

有 O(N^2) 表示法,见http://***.com/questions/37009287/using-pandas-append-within-for-loop 嗨@Ilya - 假设您在链接中指的是亚历山大的帖子 - 所引用的较慢性能是因为使用DataFrame.append 操作而不是list.append 操作 - 不是因为DataFrame.append 操作而不是 DataFrame.concat 操作。 我不确定python是如何管理内存的,但我希望追加操作会使用小于或等量的内存(因为不相关的信息会被垃圾收集),并且 concat 操作可能使用append 'under the hood' - 几乎没有,可能没有性能提升(考虑到更大的内存需求,性能可能更差)。 我试过了,但我的 data_you_need 是空的。不知道出了什么问题 永远不要增长数据框!改为附加到列表。从***.com/questions/10715965/…查看i.stack.imgur.com/Ag2NQ.png

以上是关于附加在 for 循环中生成的 pandas 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.x - 使用 for 循环将数据附加到 Pandas 数据帧

无法在嵌套循环中使用 pandas 附加更大的数据帧。如何更改为 numpy 向量化?

如何在 for 循环中附加 pyspark 数据帧?

如何从 for 循环返回多个具有唯一名称的 pandas 数据帧?

用循环生成的连接pandas DataFrames

在 for 循环中将数据帧附加在一起