2016-11-11 27 views
6

Tôi có một tấm bằng excel nhiều tiêu đề như:đọc excel với nhiều tiêu đề sử dụng Pandas

_________________________________________________________________________ 
____|_____|  Header1 |  Header2  |  Header3  | 
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColDK| 
1 | ds | 5 | 6 |9 |10 | ....................................... 
2 | dh | .......................................................... 
3 | ge | .......................................................... 
4 | ew | .......................................................... 
5 | er | .......................................................... 

Bây giờ đây bạn có thể thấy rằng hai cột đầu tiên không có tiêu đề họ đang trống nhưng khác cột có tiêu đề như Tiêu đề 1, Tiêu đề 2 và Tiêu đề 3. Vì vậy, tôi muốn đọc tờ này và hợp nhất nó với tờ khác với cấu trúc tương tự.

Tôi muốn hợp nhất nó trên cột đầu tiên 'ColX'. Ngay bây giờ tôi đang làm điều này:

import pandas as pd 

totalMergedSheet = pd.DataFrame([1,2,3,4,5], columns=['ColX']) 
file = pd.ExcelFile('ExcelFile.xlsx') 
for i in range (1, len(file.sheet_names)): 
    df1 = file.parse(file.sheet_names[i-1]) 
    df2 = file.parse(file.sheet_names[i]) 
    newMergedSheet = pd.merge(df1, df2, on='ColX') 
    totalMergedSheet = pd.merge(totalMergedSheet, newMergedSheet, on='ColX') 

Nhưng tôi không biết cột đọc của nó không chính xác và tôi nghĩ sẽ không trả về kết quả theo cách tôi muốn. Vì vậy, tôi muốn khung kết quả phải như sau:

________________________________________________________________________________________________________ 
____|_____|  Header1 |  Header2  |  Header3  |  Header4  |  Header5  | 
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColK| ColL|ColM|ColN|ColO||ColP|ColQ|ColR|ColS| 
1 | ds | 5 | 6 |9 |10 | .................................................................................. 
2 | dh | ................................................................................... 
3 | ge | .................................................................................... 
4 | ew | ................................................................................... 
5 | er | ...................................................................................... 

Bất kỳ đề xuất nào vui lòng. Cảm ơn.

Trả lời

8

Pandas đã có chức năng sẽ đọc trong toàn bộ bảng tính Excel cho bạn, do đó bạn không cần phải phân tích cú pháp/hợp nhất từng trang tính theo cách thủ công. Hãy xem pandas.read_excel(). Nó không chỉ cho phép bạn đọc trong một tập tin Excel trong một dòng duy nhất, nó cũng cung cấp các tùy chọn để giúp giải quyết vấn đề bạn đang gặp phải.

Vì bạn có các cột con, những gì bạn đang tìm kiếm là MultiIndexing. Theo mặc định, gấu trúc sẽ đọc ở hàng trên cùng làm hàng tiêu đề duy nhất. Bạn có thể chuyển đối số header vào pandas.read_excel() cho biết số lượng hàng sẽ được sử dụng làm tiêu đề. Trong trường hợp cụ thể của bạn, bạn muốn header=[0, 1], cho biết hai hàng đầu tiên. Bạn cũng có thể có nhiều trang tính, vì vậy bạn cũng có thể vượt qua sheetname=None (điều này yêu cầu nó trải qua tất cả các trang tính). Lệnh sẽ là:

df_dict = pandas.read_excel('ExcelFile.xlsx', header=[0, 1], sheetname=None) 

Điều này trả về từ điển trong đó các phím là tên trang tính và giá trị là Khung dữ liệu cho mỗi trang tính. Nếu bạn muốn thu gọn tất cả thành một DataFrame, bạn có thể chỉ cần sử dụng pandas.concat:

df = pandas.concat(df_dict.values(), axis=0) 
Các vấn đề liên quan