rya*_*lon 30 python csv floating-point numpy pandas
是否可以为Python pandas包方法pandas.DataFrame.to_csv打印的每个列专门指定一个浮点精度?
如果我有一个pandas如下排列的数据框:
In [53]: df_data[:5]
Out[53]:
year month day lats lons vals
0 2012 6 16 81.862745 -29.834254 0.0
1 2012 6 16 81.862745 -29.502762 0.1
2 2012 6 16 81.862745 -29.171271 0.0
3 2012 6 16 81.862745 -28.839779 0.2
4 2012 6 16 81.862745 -28.508287 0.0
Run Code Online (Sandbox Code Playgroud)
有一个float_format选项可用于指定精度,但这会在打印时将该精度应用于数据框的所有列.
当我这样使用时:
df_data.to_csv(outfile, index=False,
header=False, float_format='%11.6f')
Run Code Online (Sandbox Code Playgroud)
我得到以下内容,其中vals给出了不准确的精度:
2012,6,16, 81.862745, -29.834254, 0.000000
2012,6,16, 81.862745, -29.502762, 0.100000
2012,6,16, 81.862745, -29.171270, 0.000000
2012,6,16, 81.862745, -28.839779, 0.200000
2012,6,16, 81.862745, -28.508287, 0.000000
Run Code Online (Sandbox Code Playgroud)
hkn*_*ust 33
在将数据框导出为CSV文件之前,请更改列"vals"的类型
df_data['vals'] = df_data['vals'].map(lambda x: '%2.1f' % x)
df_data.to_csv(outfile, index=False, header=False, float_format='%11.6f')
Run Code Online (Sandbox Code Playgroud)
Nac*_*cho 10
这个问题有点老了,但我想贡献一个更好的答案,我想是这样的:
formats = {'lats': '{:10.5f}', 'lons': '{:.3E}', 'vals': '{:2.1f}'}
for col, f in formats.items():
df_data[col] = df_data[col].map(lambda x: f.format(x))
Run Code Online (Sandbox Code Playgroud)
我尝试使用此处的解决方案,但它对我不起作用,我决定尝试使用此处给出的先前解决方案与上面链接中的解决方案相结合。
在将数据帧保存到文件之前,您可以对数据帧使用舍入方法。
df_data = df_data.round(6)
df_data.to_csv('myfile.dat')
Run Code Online (Sandbox Code Playgroud)
hknust第一行的最新版本是:
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1}'.format(x))
Run Code Online (Sandbox Code Playgroud)
要在没有科学符号的情况下进行打印:
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1f}'.format(x))
Run Code Online (Sandbox Code Playgroud)