所以我要从精度为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行是新的内插值。我希望所有值都具有相同的长度。这里出了什么问题,我该如何解决? 同样,如果我可以对不同的列以不同的方式控制浮点精度,那就太好了。
答案 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