我正在尝试使用pandas
来处理一系列XLS文件。我目前使用的代码如下:
with pandas.ExcelFile(data_file) as xls:
data_frame = pandas.read_excel(xls, header=[0, 1], skiprows=2, index_col=None)
XLS文件的格式类似于
+---------------------------------------------------------------------------+
| REPORT |
+---------------------------------------------------------------------------+
| Unit: 1000000 USD |
+---------------------------------------------------------------------------+
| | | | | Balance |
+ ID + Branch + Customer ID + Customer Name +--------------------------+
| | | | | Daily | Monthly | Yearly |
+--------+---------+-------------+---------------+-------+---------+--------+
| 111111 | Branch1 | 1 | Company A | 10 | 5 | 2 |
+--------+---------+-------------+---------------+-------+---------+--------+
| 222222 | Branch2 | 2 | Company B | 20 | 25 | 20 |
+--------+---------+-------------+---------------+-------+---------+--------+
| 111111 | Branch1 | 3 | Company C | 30 | 35 | 40 |
+--------+---------+-------------+---------------+-------+---------+--------+
即使我明确地给了index_col=None
,大熊猫仍然会以ID
列作为索引。我想知道将行号作为索引的正确方法。
答案 0 :(得分:4)
pandas目前不支持在不解析行索引的情况下解析MultiIndex
列。相关问题here - 它可能得到支持,但以非模棱两可的方式定义会变得棘手。
这是一个黑客攻击,但现在解决这个问题的最简单方法是在数据左侧添加一个空白列,然后像这样读取它。
pd.read_excel('file.xlsx', header=[0,1], skiprows=2).reset_index(drop=True)
编辑:
如果您不想/不想修改文件,可以选择以下几个选项:
如果数据有已知/公共标题,请使用pd.read_excel(..., skiprows=4, header=None)
并自行分配列,由@ayhan建议。
如果您需要解析标题,请使用pd.read_excel(..., skiprows=2, header=0)
,然后将第二级标签变为MultiIndex
。这可能会弄乱dtypes,所以你可能还需要做一些类型转换(pd.to_numeric
)。