首页 > 解决方案 > astype('float') 改变数据,而不仅仅是数据类型

问题描述

我从 aws s3-bucket 下载了一堆 csv 文件并将它们放入数据框中。在将数据框上传到 sql server 之前,我想更改数据框的列以具有正确的数据类型。

当我astype('float64')在列上运行时,我想更改它不仅会更改数据类型,还会更改数据。

代码:

df['testcol'] = df['lineId'].astype('float64')

结果的pycharm图像

我附上了一张图片来可视化错误。如您所见,第三列 ( testcol) 中的数据与第二列 ( lineId) 中的数据不同,即使只应更改数据类型。

Apl_id可以有多个lineId',这就是我pl_id在图片中添加和排序的原因。

我用astype()错了还是这是熊猫错误?

标签: pythonpandas

解决方案


基本上,float64 似乎不足以携带那个长整数:

np.float64('211052094743748628')
Out[135]: 2.1105209474374864e+17

“浮点 64 可以达到的最大精度接近 10-16(最后一位单位 (ULP),请参阅 en.wikipedia.org/wiki/Floating-point_arithmetic),因此精确十进制值的概念远大于16 位浮点数具有误导性。” Numpy float64 vs Python float

考虑使用 int64,它可能更适合数据集中 Id 的大小:

np.int64('211052094743748628')
Out[150]: 211052094743748628

推荐阅读