熊猫to_csv float_format不起作用

时间:2018-07-23 10:31:03

标签: python pandas

所以我要从精度为8的数据文件中读取数据,然后对一些值进行插值后就将它们保存起来,就像float_format选项不起作用的地方一样

df.to_csv('data.dat',sep=' ', index=False, header=False, float_format="%.8f")

结果文件看起来像

0.02506602 0.05754493 0.36854688
0.02461631 0.0599653 0.43078098
0.02502534 0.06209149 0.44955311
0.4267356675182389 0.1718682822340447 0.5391386354945895
0.426701667727433 0.17191008887193007 0.5391897818631616
0.4266676661681287 0.17195189807522643 0.5392409104354972

前3行在数据文件中,后3行是新的内插值。我希望所有值都具有相同的长度。这里出了什么问题,我该如何解决? 同样,如果我可以对不同的列以不同的方式控制浮点精度,那就太好了。

1 个答案:

答案 0 :(得分:1)

您的代码看起来不错。您的输入数据最有可能出现问题。使用pd.DataFrame.dtypes检查所有输入序列的类型为float。如果未通过以下方式将其转换为float

df[col_list] = df[col_list].apply(pd.to_numeric, downcast='float').fillna(0)

这是一个可行的示例:

from io import StringIO
import pandas as pd

mystr = StringIO("""0.02506602 0.05754493 0.36854688
0.02461631 0.0599653 0.43078098
0.02502534 0.06209149 0.44955311
0.4267356675182389 0.1718682822340447 0.5391386354945895
0.426701667727433 0.17191008887193007 0.5391897818631616
0.4266676661681287 0.17195189807522643 0.5392409104354972""")

df = pd.read_csv(mystr, delim_whitespace=True, header=None)

print(df.dtypes)

# 0    float64
# 1    float64
# 2    float64
# dtype: object

file_loc = r'C:\temp\test.dat'
df.to_csv(file_loc, sep=' ', index=False, header=False, float_format="%.8f")

df = pd.read_csv(file_loc, delim_whitespace=True, header=None)

print(df[0].iloc[-1])

# 0.42666767