【发布时间】:2021-09-14 08:14:37
【问题描述】:
我需要将 18 位 float64 pandas 列转换为整数或字符串以便可读,避免使用指数表示法。 但我目前还没有成功。
df=pd.DataFrame(data={'col1':[915235514180670190,915235514180670208]},dtype='float64')
print(df)
col1
0 9.152355e+17
1 9.152355e+17
然后我尝试将其转换为 int64。但是最后 3 位数字出错了。
df.col1.astype('int64')
0 915235514180670208
1 915235514180670208
Name: col1, dtype: int64
但是你看..值是错误的。不知道为什么。 我从文档中读到 int64 应该能够容纳 18 位数字。
int64 Integer (-9223372036854775808 to 9223372036854775807)
知道我做错了什么吗? 我怎样才能达到我的要求?
根据 Eric Postpischil 的评论提供更多信息。 如果 float64 不能容纳 18 位数字,我可能会遇到麻烦。 事情是我通过来自 DB 的 pandas read_sql 函数调用获取这些数据。它会自动将类型转换为 float64。 我没有看到在 pandas read_sql() 中提及数据类型的选项
任何人对我可以做些什么来克服这个问题有什么想法吗?
【问题讨论】:
-
A
Float64不能表示 915235514180670190。当该十进制数字转换为Float64时,结果是最接近的可表示值,915235514180670208。将Float64转换为十进制无法重现原始值,因为它不见了。 -
问题是,我通过数据库中的 read_sql 将这些数据获取到 float64。那么,想想我能做什么?
-
您可能想首先弄清楚数据库本身是否包含您需要的信息,或者在将值输入数据库时该信息是否丢失。 DB表的相关列的列类型是什么?如果数据库已经对该列使用 IEEE 754 浮点,那么这是一项不可能完成的任务。如果它使用其他精度更高的浮点类型或整数类型,那么您可能会做一些事情。
标签: python pandas floating-point