在pandas中将长整数转换为字符串(以避免科学计数法)

8 投票
1 回答
3553 浏览
提问于 2025-04-30 00:17

我想让以下记录(现在显示为3.200000e+18,但实际上(希望)每个都是不同的长整型数字),通过使用pd.read_excel()来进行不同的解释:

ipdb> self.after['class_parent_ref']
class_id
3200000000000515954    3.200000e+18
3200000000000515951             NaN
3200000000000515952             NaN
3200000000000515953             NaN
3200000000000515955    3.200000e+18
3200000000000515956    3.200000e+18
Name: class_parent_ref, dtype: float64

目前,它们似乎以科学计数法的字符串形式出现:

ipdb> self.after['class_parent_ref'].iloc[0]
3.2000000000005161e+18

更糟糕的是,我不确定这个数字是否从我的.xlsx文件中正确读取:

ipdb> self.after['class_parent_ref'].iloc[0] -3.2e+18
516096.0

Excel中的数字(数据源)是3200000000000515952

这不是关于显示的问题,我知道我可以在这里进行更改。关键是要保持读取时底层数据的原始形式(这样如果我把它写回Excel,它看起来会一样,并且如果我使用这些数据,它看起来就像在Excel中那样,而不是Xe+Y)。如果我能确保它是正确数字的字符串表示,我当然会接受字符串。

你可能会注意到,我想要看到的数字实际上恰好是其中一个标签。Pandas正确地将这些标签读取为字符串(可能是因为Excel将它们视为字符串?),而不像我输入的这个数字。(实际上,即使我在相关单元格中输入="3200000000000515952"后重新读取,我得到的结果还是和上面描述的一样。)

我该如何从数据框中获取3200000000000515952?我在想pandas是否对长整型数字有限制,但我找到的唯一相关信息是1) 有点过时,2) 看起来和我面临的情况不一样。

谢谢!

暂无标签

1 个回答

2

把你表格中的 NaN 值转换成 0,然后把这一列的数据类型改成整数,这样就可以了。

df[['class_parent_ref']] = df[['class_parent_ref']].fillna(value = 0)
df['class_parent_ref'] = df['class_parent_ref'].astype(int)

或者在读取文件的时候,可以设置 keep_default_na = False 用于 pd.read_excel(),还有 na_filter = False 用于 pd.read_csv()

撰写回答