如何确保pandas.to\u csv()不变

2024-10-01 22:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码在Python2.7.5.final.0(pandas 0.15.1和numpy 1.9.1)和python2.7.11.final.0(pandas 0.18.0和numpy 1.10.4)中生成不同的结果。在

前一个版本给出结果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和{}。在

看起来pandas.DataFrame.to_csv()的最新版本将浮动限制为12位数,但我在pandas文档中找不到任何内容来说明更改是何时发生的——或者为什么发生的。在

这导致我的一些单元测试在升级到anaconda时失败;我希望能够升级而不必大量修改我的测试。在


Tags: csvtoimport版本numpytxtdataframepandas
1条回答
网友
1楼 · 发布于 2024-10-01 22:27:12

更新2:

您可以尝试使用np.set_printoptions(precision=20)函数:

np.set_printoptions(precision=20)
df.to_csv('d:/temp/a.csv', index=False)

给了我

d:/温度/a.csv:

^{pr2}$

注:使用熊猫0.18.1

数据框:

In [25]: df
Out[25]:
            One
0  1.829250e+10
1  1.234568e+14

旧答案:

to_csv()调用中使用float_format='%16.4f'参数

文件:

float_format : string, default None

Format string for floating point numbers

相关问题 更多 >

    热门问题