2024-06-06 09:22:22 发布
网友
我正在读一个CSV,上面有如下浮点数:
Bob,0.085 Alice,0.005
然后导入到数据帧中,并将此数据帧写入新位置
df = pd.read_csv(orig) df.to_csv(pandasfile)
现在这个pandasfile有:
pandasfile
Bob,0.085000000000000006 Alice,0.0050000000000000001
怎么了?也许我得换一种类型,比如float32之类的?
我使用熊猫0.9.0和1.6.2。
更新:在编写时,答案是准确的,浮点精度仍然不是默认的to-csv/read-csv(精度性能折衷;默认情况下更喜欢性能)。
现在有the ^{} argument available for ^{}和the ^{} argument available for ^{}。
为了更好地理解这个问题,原著还是值得一读的。
这是熊猫的一个错误,不仅在“to-csv”函数中,而且在“read-csv”中。这不是一个普通的浮点问题,尽管浮点运算确实是一个需要程序员注意的问题。下面这篇文章稍微澄清了这个问题:
http://docs.python.org/2/tutorial/floatingpoint.html
一句经典的“问题”是。。。
>>> 0.1 + 0.1 + 0.1 0.30000000000000004
。。。它并不像人们所期望的那样显示0.3。另一方面,如果您使用定点运算处理计算,并且仅在最后一步使用浮点运算时,它将按您的预期工作。请参阅:
>>> (1 + 1 + 1) * 1.0 / 10 0.3
如果您迫切需要避免这个问题,我建议您创建另一个CSV文件,其中包含所有的数字作为整数,例如乘以100,1000或其他因素,这证明是方便的。在应用程序中,像往常一样读取CSV文件,您将得到这些整数。然后将这些值转换为浮点值,除以之前乘以的因子。
正如评论中提到的,这是一个一般的浮点问题。
但是,可以使用to_csv的float_format关键字隐藏它:
to_csv
float_format
df.to_csv('pandasfile.csv', float_format='%.3f')
或者,如果不希望0.0001四舍五入为零:
df.to_csv('pandasfile.csv', float_format='%g')
会给你:
在输出文件中。
有关%g的解释,请参见Format Specification Mini-Language。
%g
更新:在编写时,答案是准确的,浮点精度仍然不是默认的to-csv/read-csv(精度性能折衷;默认情况下更喜欢性能)。
现在有the ^{} argument available for ^{} 和the ^{} argument available for ^{} 。
为了更好地理解这个问题,原著还是值得一读的。
这是熊猫的一个错误,不仅在“to-csv”函数中,而且在“read-csv”中。这不是一个普通的浮点问题,尽管浮点运算确实是一个需要程序员注意的问题。下面这篇文章稍微澄清了这个问题:
一句经典的“问题”是。。。
。。。它并不像人们所期望的那样显示0.3。另一方面,如果您使用定点运算处理计算,并且仅在最后一步使用浮点运算时,它将按您的预期工作。请参阅:
如果您迫切需要避免这个问题,我建议您创建另一个CSV文件,其中包含所有的数字作为整数,例如乘以100,1000或其他因素,这证明是方便的。在应用程序中,像往常一样读取CSV文件,您将得到这些整数。然后将这些值转换为浮点值,除以之前乘以的因子。
正如评论中提到的,这是一个一般的浮点问题。
但是,可以使用
to_csv
的float_format
关键字隐藏它:或者,如果不希望0.0001四舍五入为零:
会给你:
在输出文件中。
有关
%g
的解释,请参见Format Specification Mini-Language。相关问题 更多 >
编程相关推荐