2016-04-28 112 views
1

我試圖從Excel導入數據框並保持多索引格式。從Excel導入多索引數據框

此導入罰款:

def import_cp(cp_sheet_name): 
    xl = pd.ExcelFile('FileNameA.xlsx') 
    df_first = xl.parse(cp_sheet_name) 
    df_second = xl.parse(cp_sheet_name) 
    # there's many more 
    return df_first, df_second 

df_first = import_cp("Sheet 1") 

Excel的格式是這樣的:

|  |  Alpha  |  Bravo  | Charlie  | 
|Position| Area | Gain | Area | Gain | Area | Gain | 
| 1 | 0.5 | 1.1 | 0.5 | 1.1 | 1.7 | 1.6 | 
| 2 | 0.6 | 1.0 | 0.6 | 1.0 | 1.5 | 1.4 | 

凡阿爾法布拉沃細胞被合併。

當我輸入我得到:

( |Unnamed: 0 Alpha| Unnamed: 2 Bravo| Unnamed: 4 Charlie| 
0 |Position Area| Gain Area | Gain Area  | 
1 | 1  0.5 | 1.17 0.5 | 1.13  0.5 | 
2 | 2  0.5 | 1.17 0.5 | 1.13  0.5 | 

我嘗試使用header=0然而這並沒有太大變化和fillna並不理想,因爲我不想Alpha Alpha Bravo Bravo Charlie Charlie

任何幫助,在此也將不勝感激。

回答

1

我認爲你需要閱讀列添加參數header=[0,1]read_excelMultiIndexindex_col=0閱讀第一列indexsheetname='sheet1'閱讀sheet與名稱sheet1。然後,你可以通過rename_axis(新中pandas0.18.0

import pandas as pd 

df = pd.read_excel('test.xlsx', header=[0,1], index_col=0, sheetname='sheet1') 
print df 
     Alpha  Bravo  Charlie  
Position Area Gain Area Gain Area Gain 
1   0.5 1.1 0.5 1.1  1.7 1.6 
2   0.6 1.0 0.6 1.0  1.5 1.4 

df = df.rename_axis((None,None), axis=1) 
print df 
    Alpha  Bravo  Charlie  
    Area Gain Area Gain Area Gain 
1 0.5 1.1 0.5 1.1  1.7 1.6 
2 0.6 1.0 0.6 1.0  1.5 1.4 

print df.index 
Int64Index([1, 2], dtype='int64') 

print df.columns 
MultiIndex(levels=[[u'Alpha', u'Bravo', u'Charlie'], 
        [u'Area', u'Gain']], 
      labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]]) 
+0

嗨Jezrael重置列名,謝謝你的回答!我收到一個錯誤:TypeError:列表索引必須是整數,而不是列表。這是標題設置的問題嗎? – OParker

+0

我不知道,我認爲'header = [0,1]'中的參數'0'和'1'意味着將excel文件中的第一行和第二行讀取爲列。順便說一下,你的熊貓版本是什麼? 'print pd.show_versions()'? – jezrael

+0

目前我正在運行0.16.2 ...但更新按鈕沒有顯示任何更新?我應該嘗試下載0.18嗎? – OParker