从Python熊猫聚合结果格式化/抑制科学计数法


162

如何对熊猫的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)


3
我看到了这个问题,但不确定如何帮助我。我只是想保留当前的dtype,它是float并仅在结果中显示所有小数而不是科学计数法。
horatio1701d 2014年

那可能只是一个展示。但是,如果您认为问题的某些特殊之处使您的问题与Dan链接中的问题有所不同,那么您需要发布有关问题的更多信息,最好使用复制问题的小型数据集。另外dtypes,您的结果如何?
TomAugspurger 2014年

Answers:


237

当然,我在评论中链接的答案不是很有帮助。您可以像这样指定自己的字符串转换器。

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

1
谢谢丹。您知道如何重设熊猫选项吗?
乔什(Josh)

1
@Josh要在pandas中临时设置选项,可以使用pandas.option_context(请参阅pandas.pydata.org/pandas-docs/stable/genic/…)。
muellermarkus

它通常不是出于美学目的,而是为了通过大型数字数据框上的可视皮层更快地浏览信息。
matanster

pd.set_option('display.float_format',lambda x:'%.3f'%x)也为我工作
–driven_spider

5
这可以工作,您也可以使用更新的f字符串表示法。就像 pd.set_option('display.float_format', lambda x: f'{x:,.3f}')您也想要一千个分隔符一样。
576i

87

这是另一种方式,类似于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)

1
我认为,使用格式字符串对不太熟悉Python并且可能不了解lambda函数的团队成员更容易。
史蒂文·霍维尔

23

您可以使用舍入功能只是为了抑制特定数据框的科学计数法:

df1.round(4)

或者您可以通过以下方式抑制全局:

pd.options.display.float_format = '{:.4f}'.format

11

如果要在jupyter笔记本单元格中设置数据框输出的样式,则可以基于每个数据框设置显示样式:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

在此处输入图片说明

请参阅此处的文档。


0

如果您想使用这些值(例如,作为csvfile csv.writer的一部分),则可以在创建列表之前对数字进行格式化:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.