【问题标题】:Precision lost while using read_csv in pandas在 pandas 中使用 read_csv 时精度丢失
【发布时间】:2016-08-22 21:43:05
【问题描述】:

我在一个文本文件中有以下格式的文件,我正在尝试将其读入 pandas 数据帧。

895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0.5139162227|

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

df = pd.read_csv('mockup.txt',header=None,delimiter='|')

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

df[5].head()

0    0.467798
1    0.258165
2    0.860384
3    0.803388
4    0.249820
Name: 5, dtype: float64

如何获得输入文件中的完整精度?我有一些需要执行的矩阵运算,所以我不能将它转换为字符串。

我发现我必须对dtype 做点什么,但我不确定应该在哪里使用它。

【问题讨论】:

    标签: python csv pandas numpy floating-accuracy


    【解决方案1】:

    只是显示问题,见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    
    

    编辑:(谢谢Mark Dickinson):

    Pandas 使用专用的十进制到二进制转换器,为了速度而牺牲了完美的准确性。将 float_precision='round_trip' 传递给 read_csv 可以解决此问题。请参阅documentation 了解更多信息。

    【讨论】:

    • 谢谢。还有另一个菜鸟问题。当数据主要是浮点值时,在使用 read_csv() 时,一般有什么建议可以更快地加载到数据帧中。
    • 我觉得你可以试试设置dtypes,see
    • 值得注意的是,这纯粹不是显示问题,因为如果您使用 Pandas 将数据帧写入 CSV 文件然后读取再次返回时,结果可能会出现小的浮点错误:Pandas 使用专用的十进制到二进制转换器,为了速度而牺牲了完美的准确性。将 float_precision='round_trip' 传递给 read_csv 可以解决此问题。请参阅documentation 了解更多信息。
    • @Mark Dickinson 非常感谢您的评论,我添加它来回答。
    • @MarkDickinson 一旦我设置了 float_precision='round_trip',我的笔记本内核就会死掉
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2013-02-03
    • 2016-09-26
    • 2016-06-06
    • 1970-01-01
    • 2020-11-22
    • 2022-07-30
    • 2013-06-17
    相关资源
    最近更新 更多