我是 pandas 新手,目前正在尝试对以下架构中的 Excel 数据进行一些分析:
我的目标是使用索引标签 XYZ
、CDE
、EFG
、 进行可视化x 轴上的 HU
以及 Yes
、ProbYes
、X
的相应 Perc
值, ProbNo
, No
堆叠在 y 轴上。
目前我正在通过代码将 Excel 数据解析为 panda DataFrame
:
import pandas as pd
path = 'x1.xlsx'
x = pd.ExcelFile(path)
sheets = x.sheet_names
table = x.parse(sheets[0], header=2) # take line 2 as column-names
生成的table
的MultiIndex
似乎没问题:
>>> table.index
MultiIndex(levels=[[u'Individual', u'Summary'], [u'ABC', u'CDE', u'EFG', u'HIJ'], [u'Abs', u'Perc']], labels=[[0, -1, -1, -1, -1, -1, -1, -1, 1, -1], [0, -1, 1, -1, 2, -1, 3, -1, -1, -1], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]])
但是,不可能访问特定行:
>>> table.ix[('Individual', 'CDE')]
KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'
...也不可能访问或过滤/删除包含行索引的列
>>> table.index.names
FrozenList([None, None, None])
即索引没有名称,所以我想我无法访问它们?
我尝试通过替代解析来简化数据结构:
>>> table2 = x.parse(sheets[0], header=2, skiprows=2, parse_cols='B,:I')
然而,这并没有真正帮助。
编辑:
它有助于排序
:
>>> table.sort(inplace=True)
>>> table[:4]
产量:
使用该表我无法进行分析...
最佳答案
我认为做完之后
table.sort(inplace=True)
您也许能够访问
table.ix[('Individual', 'CDE')]
编辑:
我知道为什么——你的Excel文件合并了像A4:A11
这样的单元格。当您将其加载到 pandas DataFrame 中时,索引 Individual
仅在 A4
而索引 A5:A11
都是nan
我能想到的一个解决方法是:
table =table.reset_index().fillna(method='ffill').set_index(['level_0','level_1','level_2'])
#reset_index() automatically gives column names level_?
那么你就可以开始了:
table.ix[('Individual','CDE')]
关于python - Pandas、Excel 导入和多重索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963665/