非常に大きな数の科学表記法を生成する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
これが好ましい方法かどうかはわかりませんが、うまくいきます。
純粋に審美的な目的で数字を文字列に変換するのは悪い考えのように思えますが、正当な理由がある場合、これは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
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)
特定のデータフレームの科学表記法を抑制するためだけに、ラウンド関数を使用できます。
df1.round(4)
または、次の方法でグローバルに抑制できます:
pd.options.display.float_format = '{:.4f}'.format
Jupyterノートブックセルのデータフレームの出力をスタイルする場合は、データフレームごとに表示スタイルを設定できます。
df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")
ドキュメントを参照してください here 。
たとえば、csvfile csv.writerの一部として値を使用する場合は、リストを作成する前に数値をフォーマットできます。
df['label'].apply(lambda x: '%.17f' % x).values.tolist()