如何使用熊猫to_csv float_format?

问题描述 投票:3回答:1

我正在从精度为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

前三行在数据文件中,后三行是新的内插值。我希望所有值都具有相同的长度。这里出了什么问题,我该如何解决?

也:如果我可以对不同的列以不同的方式控制浮点精度,那就太好了。

python pandas string.format
1个回答
2
投票

您的代码看起来不错。您的输入数据最有可能出现问题。使用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
© www.soinside.com 2019 - 2024. All rights reserved.