2015-02-23 178 views
18

我正在訪問for循環中的一系列Excel文件。然後,我將excel文件中的數據讀取到熊貓數據框中。我不知道如何將這些數據幀附加到一起,然後將數據幀(現在包含所有文件中的數據)保存爲新的Excel文件。在for循環中添加生成的大熊貓數據框

這裏是我的嘗試:

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

謝謝!

回答

42

使用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, axis=1) 
# write DataFrame to an excel sheet 
appended_data.to_excel('appended.xlsx') 
+0

太棒了,謝謝。你知道是否有一種簡單的方法將標識符添加到每個DataFrame到最終的Excel文件中?目的是爲了能夠跟蹤數據來自哪個文件。 – 2015-02-23 10:27:44

+0

當您讀取數據時,添加一個包含文件名的新列。可能與'data ['filename'] = infile'一樣簡單。 – biobirdman 2015-02-23 10:45:12

+1

太棒了!謝謝一堆。如果將來有人想試試這個,只需用一個非上標的替換']':) – 2015-02-23 11:02:57

11

你可以試試這個。

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) 

我希望它能提供幫助。

+1

有O(N^2)表示法,參見[http://stackoverflow.com/questions/37009287/using- pandas-append-within-for-loop](http://stackoverflow.com/questions/37009287/using-pandas-append-within-for-loop) – 2016-12-28 08:43:29

+0

謝謝,夥計,這非常有幫助 – 2017-11-07 10:18:42

+0

嗨@Ilya - 假設你指鏈接中的亞歷山大的帖子 - 引用速度較慢的性能是因爲使用「DataFrame.append」操作而不是「list.append」操作 - 而不是因爲DataFrame.append操作而不是DataFrame.concat操作。 – Charlie 2017-11-09 05:30:06