我想寻求指导我在pandas.read_csv例程中发现的问题的补救步骤。当我使用pd.to_csv将一个长整数存储到一个文件中时,它将数据存储好 - 但是当我使用pd.read_csv读取它时,它与最后3位数字混淆。当我尝试使用to_csv(不进行任何编辑)再次将其保存时,生成的CSV文件中的数字与原始CSV文件不同。我下面所示的问题(注意如何4321113141090630389成为4321113141090630400和4321583677327450765成为4321583677327450880):与pd.read_csv截断问题
通过pd.to_csv创建原始CSV文件:
grep -e 321583677327450 -e 321113141090630 orig.piece
orig.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4321583677327450765
orig.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4321113141090630389
import pandas as pd
import numpy as np
orig = pd.read_csv('orig.piece')
orig.dtypes
Unnamed: 0 int64
aa object
act float64
...
...
s_act float64
dtype: object
>orig['s_act'].head(6)
0 NaN
1 4.321584e+18
2 4.321974e+18
3 4.321494e+18
4 4.321283e+18
5 4.321113e+18
Name: s_act, dtype: float64
>orig['s_act'].fillna(0).astype(int).head(6)
0 0
1 4321583677327450880
2 4321973950881710336
3 4321493786516159488
4 4321282586859217408
5 4321113141090630400
>orig.to_csv('convert.piece')
grep -e 321583677327450 -e 321113141090630 orig.piece convert.piece
orig.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4321583677327450765
orig.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4321113141090630389
convert.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4.321583677327451e+18
convert.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4.3211131410906304e+18
请你帮助我理解为什么read_csv搅乱最后三位数字?它甚至不是圆整的问题,数字是完全不同的(如4321583677327450765变为4321583677327450880以上)是否因为科学记数法出现 - 我们如何禁用它并让大熊猫将这些数据视为绝对对象/字符串或计划整数/浮动?
btw,当我说'orig = pd.read_csv('orig.piece',dtype = str)'时,问题就消失了。但是,这有什么缺点吗?此外,这听起来像一个解决方法,而不是一个修复。 – user3615154