从 Excel 读取多重索引 - 如何重置索引而不丢失前导零?

问题描述 投票:0回答:1

如标题所述,

df.reset_index()
目前正在删除我的几列中的前导零,因为这些列已转换为 int64。 Excel 文件由产品和业务代码组成,显示哪些代码属于不同的聚合。不同的代码可能具有不同数量的前导零,并且代码本身具有不同数量的数字,因此
.zfill()
并不能完全消除它。我手头有一个快速修复方法,可以修改数据,但我想学习如何在将来解决此类问题。

这就是我目前在循环中读取文件的方式:

df = pd.read_excel("mappingOfAggregates.xlsx", index_col=[0,1,2,3], dtype=str)

我也曾在每个文件读完后使用

df = df.astype('object')
,但当我使用
df.reset_index()
时似乎并不影响最终结果。

Chat GPT 建议我重置索引,然后在每一列上使用

.astype('object')
- 这正如人们所期望的那样有效。

感谢任何正确方向的指点。

python pandas excel multi-index
1个回答
0
投票

问题

使用

df.reset_index()
时,多个列中的前导零会丢失,因为这些列将转换为
int64
。 DataFrame 列包含产品和业务代码,它们可能具有不同数量的前导零。目标是重置索引而不丢失此信息。

当前方法

df = pd.read_excel("mappingOfAggregates.xlsx", index_col=[0,1,2,3], dtype=str)
df = df.astype('object')

尽管在读取过程中将数据类型设置为

str
并随后使用
astype('object')
,但在使用
df.reset_index()
时问题仍然存在。

解决方案

解决方案涉及两个主要步骤:

  1. 重置索引
  2. 确保每列保留字符串数据类型
df = df.reset_index()
for col in df.columns:
    df[col] = df[col].astype('object')

通过循环遍历每一列并将其数据类型设置为

object
,我们确保没有列自动转换为
int64
,保留前导零。

结论

为了避免数据转换问题,尤其是在处理包含前导零的数据时,在整个数据处理管道中保持正确的数据类型至关重要。提供的解决方案确保即使在重置 DataFrame 中的索引后也保留前导零。

© www.soinside.com 2019 - 2024. All rights reserved.