是否可以为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
可以使用float_format
选项指定精度,但这会在打印时将该精度应用于数据框的所有列。
当我这样使用时:
df_data.to_csv(outfile, index=False,
header=False, float_format='%11.6f')
我得到以下内容,其中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
答案 0 :(得分:32)
在将数据框导出为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')
答案 1 :(得分:4)
更多当前版本的hknust的第一行将是:
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1}'.format(x))
在没有科学记数法的情况下进行打印:
df_data['vals'] = df_data['vals'].map(lambda x: '{0:.1f}'.format(x))
答案 2 :(得分:3)
在将数据帧保存到文件之前,您可以使用round方法处理数据帧。
df_data = df_data.round(6)
df_data.to_csv('myfile.dat')
答案 3 :(得分:2)
您可以使用to_string
执行此操作。有一个formatters
参数,您可以在其中为格式化程序提供列名称的字典。然后,您可以使用一些正则表达式将默认列分隔符替换为您选择的分隔符。
答案 4 :(得分:1)
@mattexx建议的to_string
方法看起来更好,因为它不会修改数据帧。
使用jupyter
笔记本通过to_html
方法获得漂亮的HTML输出时,它也可以很好地概括。这里我们设置一个新的默认精度为4,并覆盖它以获得特定列wider
的5位数:
from IPython.display import HTML
from IPython.display import display
pd.set_option('precision', 4)
display(HTML(df.to_html(formatters={'wider': '{:,.5f}'.format})))
答案 5 :(得分:1)
这个问题有点老了,但我想提供一个更好的答案,我想是这样的:
az ad sp create-for-rbac --name ServicePrincipalName --create-cert
我尝试使用解决方案here,但对我而言不起作用,我决定尝试结合此处提供的先前解决方案和上面的链接进行尝试。