如何使用熊猫 to_csv float_format?

Eul*_*lar 6 python string.format pandas

我正在从具有 8 个精度的数据文件中读取数据,然后在插入一些值之后,我将它们保存起来,就像 float_format 选项不起作用的地方一样,

df.to_csv('data.dat',sep=' ', index=False, header=False, float_format="%.8f")
Run Code Online (Sandbox Code Playgroud)

结果文件看起来像

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
Run Code Online (Sandbox Code Playgroud)

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

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

jpp*_*jpp 5

你的代码看起来不错。最有可能的是,您的输入数据存在问题。使用pd.DataFrame.dtypes检查所有的输入系列类型float。如果它们没有转换为float通过:

df[col_list] = df[col_list].apply(pd.to_numeric, downcast='float').fillna(0)
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例:

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
Run Code Online (Sandbox Code Playgroud)