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
显示什么?@ayhandf.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
显示什么?@ayhandf.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
并在以后分配多索引。因为将它们作为行读取可能会弄乱数据类型。