Python Pandas集計結果からの科学的表記のフォーマット/非表示


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を保持し、科学的表記の代わりにすべての小数を結果に表示することを考えています。
horatio1701d 2014年

それはおそらく単なる表示です。しかし、問題に何か特別なことがあり、Danのリンクの問題とは異なると思われる場合は、問題についてより多くの情報を投稿する必要があります。できれば、問題を再現する小さなデータセットを使用してください。またdtypes、あなたの結果はどうですか?
TomAugspurger、2014年

回答:


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

これが望ましい方法かどうかはわかりませんが、うまくいきます。

純粋に美的目的のために数値を文字列に変換することは悪い考えのようですが、正当な理由がある場合、これは1つの方法です。

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.option_contextpandas.pydata.org/pandas-docs/stable/generated/…を参照)。
muellermarkus 2018

多くの場合、これは美的目的ではなく、大きな数値データフレームを介して視覚皮質を介して情報をすばやくスキミングするためのものです。
matanster

pd.set_option( 'display.float_format'、ラムダX: '%.3f' %x)はあまりにも私のために働いた
driven_spider

5
これは機能し、新しいf-string表記を使用することもできます。pd.set_option('display.float_format', lambda x: f'{x:,.3f}')千単位の区切り文字も必要な場合と同様 です。
576iの

87

これは別の方法です。DanAllanの回答に似ていますが、ラムダ関数はありません。

>>> 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に慣れておらず、ラムダ関数を理解していない可能性があるチームメンバーには、フォーマット文字列を使用する方がより親しみやすいと思います。
スティーブンCハウエル

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.