格式化/抑制 Pandas 聚合结果中的科学计数法
- 2025-01-08 08:49:00
- admin 原创
- 151
问题描述:
如何修改 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)
解决方案 1:
当然,我在评论中链接的答案并不是很有帮助。您可以像这样指定自己的字符串转换器。
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
解决方案 2:
这是另一种方法,类似于Dan Allan 的答案,但没有 lambda 函数:
>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0 0.41
1 0.99
2 0.10
或者
>>> pd.set_option('display.float_format', '{:.2f}'.format)
解决方案 3:
您可以使用 round 函数来抑制特定数据框的科学计数法:
df1.round(4)
或者您可以通过以下方式全局抑制:
pd.options.display.float_format = '{:.4f}'.format
解决方案 4:
如果要设置 jupyter notebook 单元中数据框输出的样式,可以针对每个数据框设置显示样式:
df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")
请参阅此处的文档。
解决方案 5:
全局设置固定的小数位数通常不是一个好主意,因为无论大小,对于您要显示的所有各种数据,这个小数位数都不太可能是合适的。相反,请尝试以下方法,它只会为大值和非常小的值提供科学计数法(并且会添加千位分隔符,除非您省略“,”):
pd.set_option('display.float_format', lambda x: '%,g' % x)
或者,为了几乎完全抑制科学计数法而不损失精度,请尝试以下操作:
pd.set_option('display.float_format', str)
解决方案 6:
扩展这个有用的评论,这里有一个解决方案,设置格式选项仅显示结果而不永久更改选项:
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
解决方案 7:
我有多个具有不同浮点数的数据框,因此感谢 Allans 的想法实现了动态长度。
pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)
缺点是,如果浮点数中最后一个为 0,它会被截断。所以结果不是 0.000070,而是 0.00007。
解决方案 8:
如果您想使用这些值,比如作为 csvfile csv.writer 的一部分,可以在创建列表之前格式化数字:
df['label'].apply(lambda x: '%.17f' % x).values.tolist()
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD