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

fnvucqvd  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(117)

正如标题所述,df.reset_index()目前在我的几个列中删除了前导零,因为这些列被转换为int 64。Excel文件由产品和业务代码组成,显示哪些代码属于不同的聚合。不同的代码可能有不同数量的前导零,代码本身也有不同数量的if位,所以.zfill()并不能完全解决这个问题。我手头有一个快速解决方案,修改数据,但我想学习如何在未来绕过这些问题。
这是我当前在循环中读取文件的方式:

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

我也曾在读取每个文件后使用df = df.astype('object'),但当我使用df.reset_index()时,它似乎并不影响最终结果。
ChatGPT建议我重置索引,然后在每一列上使用.astype('object')--这和人们期望的一样好。
在正确的方向上的任何指针都是收到的感谢。

slhcrj9b

slhcrj9b1#

您可以使用index_col参数保留索引,但要保留前导零,您需要将列的类型指定为字符串而不是数值。
假设你有列ABCD作为索引,你可以通过提供一个字典,每个列名对应于str'str'pd.StringDtype(),如下所示:

pd.read_excel(
    "mappingOfAggregates.xlsx",
    index_col=[0, 1, 2, 3],
    dtypes={
        "A": pd.StringDtype(),
        "B": pd.StringDtype(),
        "C": pd.StringDtype(),
        "D": pd.StringDtype(),
    },
)

相关问题