带着Pandas的花车64

2024-06-06 09:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一个CSV,上面有如下浮点数:

Bob,0.085
Alice,0.005

然后导入到数据帧中,并将此数据帧写入新位置

df = pd.read_csv(orig)
df.to_csv(pandasfile)

现在这个pandasfile有:

Bob,0.085000000000000006
Alice,0.0050000000000000001

怎么了?也许我得换一种类型,比如float32之类的?

我使用熊猫0.9.0和1.6.2。


Tags: csvto数据类型dfreadpdbob
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_csvfloat_format关键字隐藏它:

df.to_csv('pandasfile.csv', float_format='%.3f')

或者,如果不希望0.0001四舍五入为零:

df.to_csv('pandasfile.csv', float_format='%g')

会给你:

Bob,0.085
Alice,0.005

在输出文件中。

有关%g的解释,请参见Format Specification Mini-Language

相关问题 更多 >