【问题标题】:Appending pandas dataframes generated in a for loop附加在 for 循环中生成的 pandas 数据帧
【发布时间】: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")

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案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)
    

    希望对你有帮助。

    【讨论】:

    • 嗨@Ilya - 假设您在链接中指的是亚历山大的帖子 - 所引用的较慢性能是因为使用DataFrame.append 操作而不是list.append 操作 - 不是因为DataFrame.append 操作而不是 DataFrame.concat 操作。
    • 我不确定python是如何管理内存的,但我希望追加操作会使用小于或等量的内存(因为不相关的信息会被垃圾收集),并且 concat 操作可能使用append 'under the hood' - 几乎没有,可能没有性能提升(考虑到更大的内存需求,性能可能更差)。
    • 我试过了,但我的 data_you_need 是空的。不知道出了什么问题
    • 永远不要增长数据框!改为附加到列表。从stackoverflow.com/questions/10715965/…查看i.stack.imgur.com/Ag2NQ.png
    猜你喜欢
    • 2020-08-14
    • 2016-12-19
    • 2016-10-28
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多