附加在 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 向量化?