python - astype('float') 改变数据,而不仅仅是数据类型
问题描述
我从 aws s3-bucket 下载了一堆 csv 文件并将它们放入数据框中。在将数据框上传到 sql server 之前,我想更改数据框的列以具有正确的数据类型。
当我astype('float64')
在列上运行时,我想更改它不仅会更改数据类型,还会更改数据。
代码:
df['testcol'] = df['lineId'].astype('float64')
我附上了一张图片来可视化错误。如您所见,第三列 ( testcol
) 中的数据与第二列 ( lineId
) 中的数据不同,即使只应更改数据类型。
Apl_id
可以有多个lineId
',这就是我pl_id
在图片中添加和排序的原因。
我用astype()
错了还是这是熊猫错误?
解决方案
基本上,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
推荐阅读
- ruby-on-rails - 将一长串文本粘贴到 Heroku rails 控制台
- java - java: ObjectInputStream 给出 NullPointerException
- express - TypeORM 批量插入?
- c++ - 用于排序算法的 C++ lambda
- docker - 减少 docker build 的输出
- c++ - QThread 没有停止
- git - Github api 完成对给定存储库分支的所有提交
- javascript - 无效的表单正文 embed.image.url:无法将“{}”解释为字符串
- intellij-idea - 如何隐藏 Find Usages 操作后可见的预览区域?
- node.js - Ytdl-core 无法正常工作 - “找不到播放器配置”