簡體   English   中英

格式化/抑制 Pandas 聚合結果的科學記數法

[英]Format / Suppress Scientific Notation from Pandas Aggregation Results

如何修改 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)

當然,我在評論中鏈接的答案不是很有幫助。 您可以像這樣指定自己的字符串轉換器。

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

這是另一種方法,類似於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)

您可以使用 round 函數來抑制特定數據幀的科學記數法:

df1.round(4)

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

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

如果要在 jupyter notebook 單元格中設置數據框的輸出樣式,可以基於每個數據框設置顯示樣式:

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

在此處輸入圖像描述

請參閱此處的文檔。

全局設置固定的小數位數通常不是一個好主意,因為無論大小如何,它都不太可能是您將顯示的所有各種數據的適當小數位數。 相反,試試這個,它只會為你提供大和非常小的值的科學記數法(並添加千位分隔符,除非你省略“,”):

pd.set_option('display.float_format', lambda x: '%,g' % x)

或者要在不損失精度的情況下幾乎完全抑制科學記數法,試試這個:

pd.set_option('display.float_format', str)

我有多個具有不同浮點的數據幀,因此對 Allans 的想法表示感謝,使之成為動態長度。

pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)

這樣做的缺點是,如果你有最后一個 0 浮動,它會削減它。 所以它將不是 0.000070,而是 0.00007。

如果您想使用這些值,例如作為 csvfile csv.writer 的一部分,可以在創建列表之前對數字進行格式化:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()

擴展這個有用的評論,這里是一個解決方案,設置格式選項只顯示結果而不永久更改選項:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM