Pandas 读取Excel文件时,允许使用基于0的行号作为索引

Pandas 读取Excel文件时,允许使用基于0的行号作为索引,pandas,Pandas,我正在尝试使用pandas处理一系列XLS文件。我当前使用的代码如下所示: with pandas.ExcelFile(data_file) as xls: data_frame = pandas.read_excel(xls, header=[0, 1], skiprows=2, index_col=None) XLS文件的格式如下所示 +-------------------------------------------------------------------------

我正在尝试使用
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\u col=None
,pandas仍然将
ID
列作为索引。我想知道将行号作为索引的正确方法。

熊猫目前不支持在不解析行索引的情况下解析
多索引
列。相关问题-它可能会得到支持,但要以一种不含糊的方式定义它会变得很棘手

这是一个黑客攻击,但是现在解决这个问题最简单的方法是在数据的左侧添加一个空白列,然后像这样读取它

pd.read_excel('file.xlsx', header=[0,1], skiprows=2).reset_index(drop=True)
编辑:

如果您不能/不想修改文件,则有以下几个选项:

  • 如果数据有一个已知/通用的标题,请使用
    pd.read_excel(…,skiprows=4,header=None)
    并根据@ayhan的建议自行分配列

  • 如果需要解析标题,请使用
    pd.read\u excel(…,skiprows=2,header=0)
    ,然后将第二级标签转换为
    多索引。这可能会弄乱数据类型,因此您可能还需要进行一些类型转换(
    pd.to\u numeric


  • pandas目前不支持在不解析行索引的情况下解析
    多索引
    列。相关问题-它可能会得到支持,但要以一种不含糊的方式定义它会变得很棘手

    这是一个黑客攻击,但是现在解决这个问题最简单的方法是在数据的左侧添加一个空白列,然后像这样读取它

    pd.read_excel('file.xlsx', header=[0,1], skiprows=2).reset_index(drop=True)
    
    编辑:

    如果您不能/不想修改文件,则有以下几个选项:

  • 如果数据有一个已知/通用的标题,请使用
    pd.read_excel(…,skiprows=4,header=None)
    并根据@ayhan的建议自行分配列

  • 如果需要解析标题,请使用
    pd.read\u excel(…,skiprows=2,header=0)
    ,然后将第二级标签转换为
    多索引。这可能会弄乱数据类型,因此您可能还需要进行一些类型转换(
    pd.to\u numeric



  • 为什么有
    标题=[0,1]
    -看起来标题是一行?我的真实工作表有一个多索引。我会解决这个问题。
    df.index
    显示什么?@ayhan
    df.index
    显示
    Int64Index([4420000118、4420000091、4420000043、4420000086、4420000086、4420000105、4420000162、442000147、4420000067、4420000069、…4420000069、4420000105、4420000105、4420000086、4420000043、4420000105、4420000100、4420000086、4420000105、4420000043],dtype='int64',长度=1317)
    (来自真实数据)但是我期待类似于
    0,1,2,3…
    为什么有
    标题=[0,1]
    -看起来标题是一行?我的真实工作表有一个多索引。我会解决这个问题。
    df.index
    显示什么?@ayhan
    df.index
    显示
    Int64Index([4420000118、4420000091、4420000043、4420000086、4420000086、4420000105、4420000162、442000147、4420000067、4420000069、…4420000069、4420000105、4420000105、4420000086、4420000043、4420000105、4420000100、4420000086、4420000105、4420000043],dtype='int64',长度=1317)
    (来自真实数据)但是我期待类似于
    0,1,2,3…
    的东西,但是使用这个
    drop=True
    ,我会丢失ID数据。但是如果我将它设置为
    False
    ,我会得到基于0的范围作为索引,但它的标题是“ID”,而
    111111
    的标题是
    索引
    。您是否添加了一个空白列?要清楚,我的意思是在解析之前在Excel中打开文件,并在文件中插入一个空白列并保存。哦,不,我不能这样做。我有>10k XLS这样的文件(它们是由银行报告程序生成的,我没有权限/也没有合法权限访问)。在这种情况下,您可能需要进行一些手动咀嚼。我将删除
    标题=[0,1]
    ,然后从解析的
    列和第0行构造列。如果文件的格式相同,则可能更容易使用
    skiprows=4
    并在以后分配多索引。因为将它们作为行读取可能会弄乱数据类型。但是使用此
    drop=True
    ,我会丢失ID数据。但是如果我将其设置为
    False
    ,我得到了基于0的范围作为索引,但是它的标题是“ID”,而
    111111
    的标题是
    index
    。你是在添加一个空白列吗?我的意思是在Excel中打开文件,在解析之前在文件中插入一个空白列并保存它。哦,不,我不能这样做。我有>10k XLS这样的文件(它们是由银行报告程序生成的,我没有权限/也没有合法权限访问)。在这种情况下,您可能需要进行一些手动咀嚼。我将删除
    标题=[0,1]
    ,然后从解析的
    .columns
    和第0行构造列。如果文件的格式相同,则可能更容易使用
    skiprows=4
    并在以后分配多索引。因为将它们作为行读取可能会弄乱数据类型。