在pandas中使用read_csv时精度会丢失

Kri*_*K S 11 python csv numpy floating-accuracy pandas

我在文本文件中有以下格式的文件,我试图读入一个pandas数据帧.

895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0.5139162227|
Run Code Online (Sandbox Code Playgroud)

如您所见,输入文件中的浮点后有10个整数.

df = pd.read_csv('mockup.txt',header=None,delimiter='|')
Run Code Online (Sandbox Code Playgroud)

当我尝试将其读入数据帧时,我没有得到最后4个整数

df[5].head()

0    0.467798
1    0.258165
2    0.860384
3    0.803388
4    0.249820
Name: 5, dtype: float64
Run Code Online (Sandbox Code Playgroud)

如何获得输入文件中的完整精度?我有一些需要执行的矩阵操作,所以我不能把它作为字符串.

我发现我必须做些什么,dtype但我不知道应该在哪里使用它.

jez*_*ael 20

它只是显示问题,请参阅docs:

#temporaly set display precision
with pd.option_context('display.precision', 10):
    print df

     0          1   2      3   4             5            6             7   \
0  895  2015-4-23  19  10000  LA  0.4677978806  0.477346934  0.4089938425   

             8             9            10            11  12  
0  0.8224291972  0.8652525793  0.682994286  0.5139162227 NaN    
Run Code Online (Sandbox Code Playgroud)

编辑:(谢谢Mark Dickinson):

Pandas使用专用的十进制到二进制转换器,为了速度而牺牲了完美的精度.传递float_precision='round_trip'给read_csv解决了这个问题.有关更多信息,请参阅文档

  • 值得注意的是,这不是*纯粹*显示问题,在某种意义上,如果您使用Pandas将数据帧写入CSV文件然后再次将其读回,则最终可能会出现小浮动 - 结果中的点错误:Pandas使用专用的十进制到二进制转换器,为了速度而牺牲了完美的精度.将`float_precision ='round_trip'`传递给`read_csv`可以解决这个问题.有关更多信息,请参阅[文档](http://pandas.pydata.org/pandas-docs/stable/io.html#specifying-method-for-floating-point-conversion). (7认同)