以下代码在python 2.7.5.final.0中使用pandas 0.15.1和numpy 1.9.1以及在python 2.7.11.final.0中使用pandas 0.18.0和numpy 1.10.4生成不同的结果( 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后失败;我希望能够升级而无需大幅修改我的测试。
答案 0 :(得分:2)
<强> 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
注意:使用pandas 0.18.1
DF:
In [25]: df
Out[25]:
One
0 1.829250e+10
1 1.234568e+14
OLD回答:
在to_csv()调用
中使用float_format='%16.4f'
参数
文档:
float_format :字符串,默认无
浮点数的格式字符串