2016-11-11 158 views
6

多個頭我有一個Excel工作表與多個頭,如:讀取Excel表用熊貓

_________________________________________________________________________ 
____|_____|  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 | .......................................................... 

現在,在這裏你可以看到,前兩列沒有標題,他們是空白,但其他列有類似的報頭Header1,Header2和Header3。所以我想閱讀這張表並將它與其他結構相似的表合併。

我想合併它的第一列'ColX'。現在我這樣做:

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

但我不知道它既不正確閱讀列,我認爲不會以我想要的方式返回結果。所以,我想產生的框架應該是這樣的:

________________________________________________________________________________________________________ 
____|_____|  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 | ...................................................................................... 

請任何建議。謝謝。

回答

8

熊貓已經有一個函數可以讀取整個Excel電子表格,因此您不需要手動分析/合併每個工作表。看看pandas.read_excel()。它不僅可以讓您以單行方式讀取Excel文件,還可以提供選項來幫助解決您遇到的問題。

既然你有子列,你要找的是MultiIndexing。默認情況下,熊貓將讀取頂行作爲唯一的標題行。您可以將header參數傳遞到pandas.read_excel(),以指示將多少行用作標題。在你的特定情況下,你需要header=[0, 1],表示前兩行。您也可能有多個工作表,所以您也可以通過sheetname=None(這告訴它通過所有工作表)。該命令將是:

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

這將返回一個字典,其中鍵是在片材名稱,並且該值是針對每個片的DataFrames。如果您想將其全部摺疊爲一個DataFrame,您可以簡單地使用pandas.concat:

df = pandas.concat(df_dict.values(), axis=0)