在pandas中将长整数转换为字符串(以避免科学计数法)
我想让以下记录(现在显示为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()
。