Python Pandas Toplama Sonuçlarından Bilimsel Gösterimi Biçimlendir / Gizle


162

Pandalar çok büyük sayılar için bilimsel gösterim üreten bir groupby işleminden çıkış biçimini nasıl değiştirebilir?

Python dize biçimlendirme yapmak biliyorum ama burada uygulamak söz konusu olduğunda ben bir kayıp.

df1.groupby('dept')['data1'].sum()

dept
value1       1.192433e+08
value2       1.293066e+08
value3       1.077142e+08

Bu, dize dönüştürürsem bilimsel gösterimi bastırır, ancak şimdi sadece dize biçimini ve ondalık sayıları nasıl ekleyeceğini merak ediyorum.

sum_sales_dept.astype(str)


3
Bu soruyu gördüm ama bunun bana nasıl yardımcı olduğunu bilmiyorum. Ben sadece şamandıra olan mevcut dtype korumak ve sadece bilimsel gösterim yerine sonuçtaki tüm ondalık sayıları göstermek için arıyorum.
horatio1701d

Muhtemelen bu sadece görünen bir şeydir. Ancak, sorununuzla ilgili özel bir şey olduğunu düşünüyorsanız, Dan'ın bağlantısındakinden farklı bir şey yaparsanız, sorununuzu daha fazla bilgi göndermeniz gerekir, tercihen sorunu yeniden üreten küçük bir veri kümesiyle. Ayrıca dtypessonuçta ne var ?
TomAugspurger

Yanıtlar:


237

Verilmiş, yorumlarda bağladığım cevap çok yardımcı değil. Kendi dize dönüştürücünüzü böyle belirleyebilirsiniz.

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

Bunu yapmanın tercih edilen yolu olup olmadığından emin değilim, ama işe yarıyor.

Sayıları yalnızca estetik amaçlar için dizelere dönüştürmek kötü bir fikir gibi görünüyor, ancak iyi bir nedeniniz varsa, bu bir yoldur:

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
Teşekkürler Dan. Panda seçeneklerini nasıl sıfırlayacağınızı biliyor musunuz?
Josh

1
@Josh Pandalarda seçenekleri geçici olarak ayarlamak için kullanabilirsiniz pandas.option_context(bkz. Pandas.pydata.org/pandas-docs/stable/generated/… ).
muellermarkus

Çoğu zaman estetik amaçlar için değil, büyük sayısal veri çerçeveleri üzerinde görsel korteks aracılığıyla bilgilerin daha hızlı kaydırılması içindir.
matanster

pd.set_option ('display.float_format', lambda x: '% .3f'% x) benim için de çalıştı
driven_spider

5
Bu işe yarar ve daha yeni f-string gösterimini de kullanabilirsiniz. Sanki pd.set_option('display.float_format', lambda x: f'{x:,.3f}')binlik ayırıcı istiyorsanız.
576i

87

İşte Dan Allan'ın cevabına benzer, ancak lambda işlevi olmadan bunu yapmanın başka bir yolu :

>>> pd.options.display.float_format = '{:.2f}'.format
>>> Series(np.random.randn(3))
0    0.41
1    0.99
2    0.10

veya

>>> pd.set_option('display.float_format', '{:.2f}'.format)

1
Biçim dizgisinin kullanılması, Python'a daha az aşina olan ve lambda işlevlerini anlamayabilecek ekip üyelerine daha kolay ulaşılabilir olacağını düşünüyorum.
Steven C. Howell

23

Belirli bir veri çerçevesi için bilimsel gösterimi bastırmak için yuvarlak işlevi kullanabilirsiniz:

df1.round(4)

ya da şunu bastırabilirsiniz:

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

11

Bir veri çerçevesinin çıktısını bir jupyter dizüstü bilgisayar hücresinde biçimlendirmek istiyorsanız, görüntüleme stilini veri çerçevesi başına ayarlayabilirsiniz:

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

resim açıklamasını buraya girin

Buradaki belgelere bakın .


0

Csvfile csv.writer öğesinin bir parçası olarak değerleri kullanmak isterseniz, sayılar bir liste oluşturmadan önce biçimlendirilebilir:

df['label'].apply(lambda x: '%.17f' % x).values.tolist()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.