【发布时间】:2014-05-30 21:29:07
【问题描述】:
我是 pandas 的新手,目前正在尝试对以下 Schema 中的 Excel 数据进行一些分析:
我的目标是在 x 轴上使用索引标签 XYZ、CDE、EFG、HU 和对应的 Perc 值进行可视化987654329@、ProbYes、X、ProbNo、No 堆叠在 y 轴上。
目前我正在通过代码将 Excel 数据解析为熊猫 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')
然而,这并没有真正的帮助。
编辑:
对sort没有帮助:
>>> table.sort(inplace=True)
>>> table[:4]
产量:
我无法用那张表进行分析...
【问题讨论】:
-
你能转换成 CSV 吗? CSV 文件非常简单:pandas.pydata.org/pandas-docs/dev/… ...或者类似的函数调用可能会在 Excel 中工作。
-
好的,我会尝试...所以您认为 Excel 导入有问题?尽管 MultiIndex 似乎很完美 - 除了索引的
lexsort_depth是0... -
我认为 Excel 解析器不如 CSV 解析器强大。我发布的链接显示了您需要的 CSV 格式以及如何直接通过调用
pandas.read_csv在列中获取 MultiIndex -
pandas.read_excel 与 read_csv 具有或多或少相同的功能(某些关键字未在 read_excel 的文档中列出,但仍可以使用 read_csv 中的关键字参数)
标签: python pandas data-analysis