2015-02-23 25 views
18

Tôi đang truy cập một chuỗi tệp Excel trong vòng lặp for. Sau đó tôi đọc dữ liệu trong tệp excel tới một khung dữ liệu gấu trúc. Tôi không thể hiểu làm thế nào để nối các dataframes với nhau để sau đó lưu các dataframe (bây giờ có chứa dữ liệu từ tất cả các tập tin) như là một tập tin Excel mới.Việc thêm các khung dữ liệu gấu trúc được tạo trong vòng lặp for

Đây là những gì tôi đã cố gắng:

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

Cảm ơn!

Trả lời

42

Sử dụng pd.concat để hợp nhất danh sách DataFrame thành một DataFrame lớn duy nhất.

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

Tuyệt vời, cảm ơn. Bạn có biết nếu có một cách dễ dàng để thêm một định danh cho mỗi DataFrame vào tập tin excel cuối cùng? Mục đích sẽ là để có thể theo dõi các tập tin dữ liệu đến từ. –

+0

Thêm cột mới có tên tệp khi bạn đọc dữ liệu. Có thể đơn giản như 'data [' filename '] = infile'. – biobirdman

+1

Tuyệt vời! Cảm ơn nhiều. Nếu bất kỳ ai trong tương lai muốn thử điều này chỉ cần thay thế ']' bằng một ký tự không phải là siêu chữ số :) –

11

bạn có thể thử điều này.

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) 

Tôi hy vọng nó có thể hữu ích.

+1

Có ký hiệu O (N^2), xem [http://stackoverflow.com/questions/37009287/using- pandas-append-within-for-loop] (http://stackoverflow.com/questions/37009287/using-pandas-append-within-for-loop) –

+0

Cảm ơn, dude, nó rất hữu ích –

+0

Hi @Ilya - giả sử bạn đang đề cập đến bài đăng của alexander trong liên kết - hiệu suất chậm hơn được tham chiếu là do sử dụng hoạt động 'DataFrame.append' thay vì hoạt động' list.append' - không phải do hoạt động 'DataFrame.append' thay vì' DataFrame.concat' hoạt động. – Charlie

Các vấn đề liên quan