如何使用pandasto_csvfloat_format?
How to use pandas to_csv float_format?
我正在读取一个精度为 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 行是新的插值。我希望所有值的长度都相同。这里出了什么问题,我该如何解决?
另外:如果我可以针对不同的列以不同的方式控制浮点精度,那就太好了。
您的代码看起来不错。您的输入数据很可能存在问题。使用 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
我正在读取一个精度为 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 行是新的插值。我希望所有值的长度都相同。这里出了什么问题,我该如何解决?
另外:如果我可以针对不同的列以不同的方式控制浮点精度,那就太好了。
您的代码看起来不错。您的输入数据很可能存在问题。使用 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