不,你不能认为这会一直有效。在
为了实现这一点,您需要知道Pandas在写入CSV文件时写出的文本值在读回时恢复为完全相同的值(再次使用Pandas)。但默认情况下,Pandasread_csv函数牺牲了速度的准确性,因此解析操作不会自动恢复相同的浮点值。在
为了演示这一点,请尝试以下操作:我们将创建一些随机值,将它们写入CSV文件,然后读回这些值,全部使用Pandas。首先是必要的进口:>>> import pandas as pd
import numpy as np
现在创建一些随机值,并将它们放入PandasSeries对象中:
^{pr2}$
现在我们使用to_csv方法将这些值写入文件,然后将该文件的内容读回DataFrame:>>> s.to_csv(‘test.csv’, header=True)
df = pd.read_csv(‘test.csv’)
最后,让我们从df的相关列中提取值并进行比较。我们将对==操作的结果求和,以确定有多少10000输入值被准确恢复。在>>> sum(test_values == df[‘test_values’])
7808
因此,大约78%的数值得到了正确的恢复,其他的则没有。在
这种行为被认为是熊猫的特征,而不是臭虫。但是,有一个解决方法:Pandas 0.15向CSV读取器添加了一个新的float_precision参数。通过将float_precision=’round_trip’提供给read_csv操作,Pandas使用了一个速度较慢但更精确的解析器。在上面的示例中,我们可以完美地恢复值:>>> df = pd.read_csv(‘test.csv’, float_precision=’round_trip’)
sum(test_values == df[‘test_values’])
10000
这是第二个例子,往另一个方向发展。前一个例子表明,先写后读并不返回相同的数据。这个例子表明,读然后写也不能保存数据。设置与您在问题中描述的设置非常匹配。首先,我们将创建A.csv,这次使用的是规则间隔值,而不是随机值:>>> import pandas as pd, numpy as np
s = pd.Series(np.arange(10**4) / 1e3, name=’test_values’)
s.to_csv(‘A.csv’, header=True)
现在我们读取A.csv,并将前半部分数据再次写回到B.csv,如步骤1所示。在>>> recovered_s = pd.read_csv(‘A.csv’).test_values
recovered_s[:5000].to_csv(‘B.csv’, header=True)
然后我们阅读A.csv和B.csv,并将A的前半部分与{}进行比较,如步骤2所示。在>>> a = pd.read_csv(‘A.csv’).test_values
b = pd.read_csv(‘B.csv’).test_values
(a[:5000] == b).all()
False
(a[:5000] == b).sum()
4251
同样,有几个值不能正确比较。打开这些文件,A.csv看起来和我预期的差不多。以下是A.csv中的前15个条目:,test_values
0,0.0
1,0.001
2,0.002
3,0.003
4,0.004
5,0.005
6,0.006
7,0.007
8,0.008
9,0.009
10,0.01
11,0.011
12,0.012
13,0.013
14,0.014
15,0.015
下面是B.csv中的相应条目:,test_values
0,0.0
1,0.001
2,0.002
3,0.003
4,0.004
5,0.005
6,0.006
7,0.006999999999999999
8,0.008
9,0.009000000000000001
10,0.01
11,0.011000000000000001
12,0.012
13,0.013000000000000001
14,0.013999999999999999
15,0.015
有关将float_precision关键字引入read_csv的更多信息,请参阅bug report。在
Original: https://blog.csdn.net/weixin_31138555/article/details/112877814
Author: wangsmaster
Title: python支持double吗_Python==如何适用于float/double?
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678940/
转载文章受原作者版权保护。转载请注明原作者出处!