【问题标题】:Import from Excel into Multi Indexed dataframe从 Excel 导入多索引数据框
【发布时间】:2016-08-23 03:15:46
【问题描述】:

我正在尝试从 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  |

Alpha Bravo 单元格的合并位置。

当我导入时,我得到:

(  |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

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: python excel pandas multi-index


    【解决方案1】:

    我认为您需要将参数header=[0,1] 添加到read_excel 以将列读取到MultiIndexindex_col=0 将第一列读取到indexsheetname='sheet1' 以读取名称为sheetsheet1。然后您可以通过rename_axis 重置列名称(pandas 0.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]])
    

    【讨论】:

    • 您好耶斯瑞尔,谢谢您的回答!我收到一个错误:TypeError:列表索引必须是整数,而不是列表。这是标题设置的问题吗?
    • 我不知道,我认为header=[0,1]中的参数01表示将excel文件中的第一行和第二行读取到列中。顺便说一句,你的熊猫版本是什么? print pd.show_versions() ?
    • 我现在运行的是 0.16.2...但是更新按钮没有显示任何更新?我应该尝试下载 0.18 吗?
    • 你的OS 是什么? Windows, Linux?
    • 并使用Anaconda ?我想你可以检查docs
    猜你喜欢
    • 2020-04-03
    • 2016-02-16
    • 2020-07-19
    • 2023-04-10
    • 2017-09-06
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多