附加在for循环中生成的熊猫数据框


77

我正在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")

谢谢!

Answers:


151

使用pd.concat以数据帧列表合并成一个大的数据帧。

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')

1
太好了,谢谢。您是否知道有一种简单的方法可以将每个DataFrame的标识符添加到最终的excel文件中?目的是能够跟踪数据来自哪个文件。
El Confuso 2015年

4
读取数据时,请在文件名中添加新列。可能很简单data['filename'] = infile
biobirdman

1
大!谢谢你 如果将来有人要尝试使用,只需将其替换]为非上标即可:)
El Confuso

6
@FaCoffee,axis=1从代码中删除,将df相互绑定在一起。:)
anky

2
除非另有说明,否则我认为“附加”是指行而不是列,因此建议axis=1从此答案中删除。
Max Ghenis '18

41

你可以试试看

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)

希望对您有所帮助。



谢谢,老兄,这非常有帮助
ye jiawei

1
嗨,@ Ilya-假设您在链接中引用亚历山大的职位-引用的性能降低是由于使用DataFrame.append运算而不是list.append运算-不是因为DataFrame.append运算而不是DataFrame.concat运算。
查理

我不确定python如何管理内存,但我希望append操作将使用小于或相等数量的内存(因为不相关的信息已被垃圾收集),并且concat操作可能使用“在幕后”添加-几乎没有(可能没有)性能改进(鉴于更大的内存需求,性能可能会降低)。
查理

2
我试过了,但我的data_you_need为空。不知
道出了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.