【Pandas】DataFrameで表示される桁数を設定する【Python】
数値計算の結果が細かい小数になることはよくあることです。
DataFrameの小数点以下の表示桁数はset_option関数から、display.float_formatのフォーマット設定を変更することでできます。
小数点以下の表示桁数を変更する
pandasのオプションにdisplay.float_formatというのがあり、浮動小数点の表示桁数を指定することができます。
何も設定していないデフォルトの場合、以下のように数値が表示されます。
1import pandas as pd
2
3# DataFrame作成
4df = pd.DataFrame({'A': [1.123456789, 2.123456789], 'B': [3.123456789, 4.123456789]})
5
6# 表示する
7print(df)
8# A B
9# 0 1.123457 3.123457
10# 1 2.123457 4.123457
format関数を使う方法
set_optionでdisplay.float_formatに小数点第2位まで表示する設定をします。
1# 表示する桁数を設定
2pd.set_option("display.float_format", "{:.2f}".format)
3
4# DataFrame作成
5df = pd.DataFrame({'A': [1.123456789, 2.123456789], 'B': [3.123456789, 4.123456789]})
6
7# 表示する
8print(df)
9# A B
10# 0 1.12 3.12
11# 1 2.12 4.12
"{:.sf}".format
の部分で小数点以下の表示桁数を設定しています。
f-stringを使う方法
Python3.6以降ではf-stringでフォーマットすることもできます。
しかし、set_option()でfloat_formatを指定する場合、第二引数に関数を指定する必要があるため、ラムダ式を書く必要があります。
1# set_optionには関数を渡す必要があるため、f-stringを使う場合、ラムダ式を使う必要がある
2pd.set_option('display.float_format', lambda x: f'{x:.3f}')
3
4# DataFrame作成
5df = pd.DataFrame({'A': [1.123456789, 2.123456789], 'B': [3.123456789, 4.123456789]})
6
7# 表示する
8print(df)
9# A B
10# 0 1.123 3.123
11# 1 2.123 4.123
個人的にはf-stringはよく使うのですが、今回のパターンのようにフォーマットを指定する関数を渡す必要がある場合、使うことはほとんどありません。
小数点以下の表示桁数設定をリセットする
pandas.reset_optionの引数にdisplay.float_formatを指定すれば、デフォルトの設定に戻ります。
1# 表示桁数の設定をリセット
2pd.reset_option('display.float_format')
3# DataFrame作成
4df = pd.DataFrame({'A': [1.123456789, 2.123456789], 'B': [3.123456789, 4.123456789]})
5
6# 表示する
7print(df)
8# A B
9# 0 1.123457 3.123457
10# 1 2.123457 4.123457
表示設定の有効範囲・有効期限について
pd.set_optionで設定した内容はPythonのセッション中はずっと有効となります。
例えば、Jupyter Notebook上で最初に
pd.set_option("display.float_format", "{:.2f}".format)
を実行した場合、そのノートのカーネルを再起動するまで有効となります。
FlaskやFastAPIのようなWEBアプリケーションのバックエンドでの場合、アプリケーションの起動時にpd.set_option
を実行するように設定しておけば、その後の全てのリクエスト処理でその設定が適用されます。
1from flask import Flask
2import pandas as pd
3
4app = Flask(__name__)
5
6pd.set_option("display.float_format", "{:.2f}".format)
7
8# 以下、ルート定義やその他のコード
9
format関数について
format関数
format()は引数に表示フォーマットを変更したい値を受け取る関数です。
- :はフォーマットを指定するための記号
- .は小数点
- 3fのfは浮動小数点、3は小数点以下の桁数
を表しています。
1x = 123.456789
2formatted_x = "{:.3f}".format(x)
3print(formatted_x)
4# 123.457
f-string
一方、f-stringは関数ではなく、フォーマット済み文字列を表すため、以下のようになります。
1x = 123.456789
2formatted_x = f"{x:.3f}"
3print(formatted_x)
4# 123.457
文字数を揃える(先頭空白埋め)
:の後に数字を指定することで、フォーマット後の文字列の文字数を指定することもできます。
1x = 123.456789
2# 全体の文字幅が10の文字にする
3formatted_x = "{:10.3f}".format(x)
4print(formatted_x)
5# " 123.457"
フォーマット後の文字数が指定した文字数より少ない場合、先頭がスペースで埋められます。
文字数を揃える(先頭0埋め)
文字数をそろえて、足りない場合は先頭を0埋めすることもできます。
1x = 123.456789
2# 全体の文字幅が10の文字。先頭を0埋め。
3formatted_x = "{:010.3f}".format(x)
4print(formatted_x)
5# "000123.457"
0埋めすることで、フォーマット後の値を文字列として扱う必要があることを知らせることができます。
format関数でフォーマットを使いまわす
formatは関数なので、引数を与えずにフォーマット方法を指定した関数自体を変数に格納し、以下のように使うこともできます。
1x = 123.456789
2# 関数を渡す(引数を指定しない)
3format_3f = "{:.3f}".format
4# 関数に引数を渡すことで、関数が実行される(フォーマットされる)
5formatted_x = format_3f(x)
6print(formatted_x)
7# 123.457
同じようなフォーマットを何度も使いまわしたい時などに使えます。
フォーマットは一般的にはその場で行うことが多いですが、
- 同じフォーマットを一か所で設定できない
- 同じフォーマットを都度設定する必要がある
場合などは、プロジェクト全体で使うためのフォーマット関数を作成しても良いかもしれません。
まとめ
1# 表示する桁数を設定。小数点第2位まで表示する場合。
2pd.set_option("display.float_format", "{:.2f}".format)
3
4# 表示桁数の設定をリセット
5pd.reset_option('display.float_format')