web-dev-qa-db-ja.com

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

非常に大きな数の科学表記法を生成する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)
105
horatio1701d

確かに、コメントでリンクした答えはあまり役に立ちません。このように独自の文字列コンバーターを指定できます。

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
174
Dan Allan

Dan Allan's answer に似ていますが、ラムダ関数を使用しない別の方法があります。

>>> 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)
54
tfhans

特定のデータフレームの科学表記法を抑制するためだけに、ラウンド関数を使用できます。

df1.round(4)

または、次の方法でグローバルに抑制できます:

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

Jupyterノートブックセルのデータフレームの出力をスタイルする場合は、データフレームごとに表示スタイルを設定できます。

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

enter image description here

ドキュメントを参照してください here

0
florestan

たとえば、csvfile csv.writerの一部として値を使用する場合は、リストを作成する前に数値をフォーマットできます。

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