如何确保pandas.to_csv()的行为不会改变

时间:2016-05-04 17:49:24

标签: python pandas dataframe anaconda

以下代码在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+11118292498239.824

看起来pandas.DataFrame.to_csv()的更高版本将浮点数限制为12位数,但我在pandas文档中找不到任何内容来判断更改发生的时间 - 或者为什么。

这导致我的部分单元测试在升级到anaconda后失败;我希望能够升级而无需大幅修改我的测试。

1 个答案:

答案 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 :字符串,默认无

     

浮点数的格式字符串