以下代码在带有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+11118292498239.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/

10-10 08:07