以下代码在带有pandas 0.15.1和numpy 1.9.1的python 2.7.5.final.0和带有pandas 0.18.0和numpy 1.10.4的python 2.7.11.final.0中产生不同的结果(anaconda包) 。
前一个版本给出结果18292498239.8
;后者是18292498239.824
。
import numpy as np
import pandas as pd
x = 18292498239.824
df = pd.DataFrame({'One': x},index=["bignum"])
df.to_csv('junktest.txt')
fh = open('junktest.txt','rb')
res = fh.read().split('\n')[1].split(',')[1]
print "Result:",res
但是,如果将x设置为
292498239.824
,则从这两者得到的结果相同:292498239.824
。如果我们增加一个数量级(x = 118292498239.824
),则结果为1.1829249824e+11
和118292498239.824
。看起来更高版本的
pandas.DataFrame.to_csv()
将浮点数限制为12位数字,但是我在pandas文档中找不到任何内容来告知更改发生的时间或原因。这导致我的某些单元测试在升级到anaconda时失败。我希望能够进行升级而不必实质性地修改测试。
最佳答案
UPDATE2:
您可以尝试使用np.set_printoptions(precision=20)
函数:
np.set_printoptions(precision=20)
df.to_csv('d:/temp/a.csv', index=False)
给我
d:/temp/a.csv:
One
18292498239.824
123456789012345.12
注意:使用熊猫0.18.1
DF:
In [25]: df
Out[25]:
One
0 1.829250e+10
1 1.234568e+14
旧答案:
在to_csv()调用中使用
float_format='%16.4f'
参数文件:
float_format:字符串,默认为无
浮点数格式字符串
关于python - 如何确保pandas.to_csv()的行为不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37034676/