如何修改pandas中groupby操作的输出格式,以生成非常大的数字的科学计数法?
我知道如何在python中进行字符串格式化,但当涉及到在这里应用它时,我不知所措。
df1.groupby('dept')['data1'].sum()
dept
value1 1.192433e+08
value2 1.293066e+08
value3 1.077142e+08
这抑制了科学符号,如果我转换为字符串,但现在我只是想知道如何字符串格式和添加小数。
sum_sales_dept.astype(str)
全局设置固定的小数点位数通常是一个坏主意,因为它不太可能为您将显示的所有不同数据提供适当的小数点位数,而不考虑大小。相反,试试这个,它只会给你一个大的和非常小的值的科学符号(并且添加一个千位分隔符,除非你省略“,”):
pd.set_option('display.float_format', lambda x: '%,g' % x)
或者在不影响精确度的情况下几乎完全压制科学符号,试试这个:
pd.set_option('display.float_format', str)
当然,我在评论中链接的答案并不是很有用。您可以像这样指定自己的字符串转换器。
In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x)
In [28]: Series(np.random.randn(3))*1000000000
Out[28]:
0 -757322420.605
1 -1436160588.997
2 -1235116117.064
dtype: float64
我不确定这是否是首选的方法,但它确实有效。
纯粹出于审美目的将数字转换为字符串似乎是一个坏主意,但如果你有一个很好的理由,这是一种方法:
In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x)
Out[6]:
0 0.026
1 -0.482
2 -0.694
dtype: object
扩展这个有用的注释,下面是一个解决方案,设置格式选项只显示结果,而不永久更改选项:
with pd.option_context('display.float_format', lambda x: f'{x:,.3f}'):
display(sum_sales_dept)
dept
value1 119,243,300.0
value2 129,306,600.0
value3 107,714,200.0