2017-06-02 71 views
0

我完全困惑。可能我錯過了pandas API的更新。Python Pandas read_excel解析Pandas 0.18.1和Pandas之間的MultiIndex數據框的不同行爲> 0.19

所以我有這個excel文件

enter image description here

Pandas 0.18.1我沒有遇到任何問題,在閱讀和分析文件。我用下面的代碼,

import pandas as pd 
fname = 'SAMPLE_EXCEL_CAUSING_ERROR_IN_PANDAS_0_19_UP.xlsx' 
pd.read_excel(fname, 'Sheet1', header=[0,1], index=[0,1]) 

它返回了我想要的東西。

[1]: https://i.stack.imgur.com/Muliy.png

最近,我更新了我的包,現在我pandasversion 0.20.1。但是,當我試圖用相同的excel文件執行相同的代碼時,它返回一個錯誤。以下是錯誤消息:ValueError: Length of new names must be 1, got 2

enter image description here

任何線索在哪裏我想念read_excel新的API?我完全困惑。是否有任何解決方法可以使用MultiIndex列讀取excel文件?我的實際數據有三級索引而不是二級索引。非常感謝您的任何建議。

P.S.如果我設置headerheader=[1,2]那麼它沒有拋出任何錯誤消息,我不能降級到0.18.1,因爲我的用戶使用0.20.1

UPDATE

奇怪。但是,我的指數錯誤。仍試圖解決此問題的解決方法。

enter image description here

+0

IIRC有一個變化以大熊貓如何讀/寫(它沒在一個版本中)多索引 - 它可能在版本更改日誌中? –

+0

@JonClements謝謝你的提示。仍在苦苦搜索,並找出如何在'read_excel'中正確使用'pandas version 0'中的'header'和'index'。19'或更高。 – arnold

+0

嗯,你需要'pd.read_excel(fname,'Sheet1',header = [0,1],index = 0)'? – jezrael

回答

2

你可以讓你的食指半手動

獲得頭

只能坐前兩排,從第二列開始,並填寫從左邊開始的空單元格

header = pd.read_excel(fname, 'Sheet1', index=[0], header=None).iloc[:2, 1:].ffill(axis=1) 

獲取數據

省略第2行,並設置第一列作爲索引

df = pd.read_excel(fname, 'Sheet1', skiprows=[0,1], index=0, header=None).rename(columns={0: 'A'}).set_index('A') 

MultiIndex

df.columns=pd.MultiIndex.from_arrays(header.values) 

df

B  D  F 
    C C E E G G 
A      
A1 X Y Z U J K 
A2 XX YY ZZ UU JJ KK 
A3 XXX  YYY  ZZZ  UUU  JJJ  KKK 
+0

感謝您的建議!終於找到了解決我的問題的方法! – arnold

相關問題