pandasでデータフレームの内容を表示するとき、大きな桁数の数字を3桁区切りで表現する方法を紹介します。
JupyterNotebookやJupyterLabを使っていて、データを人に見せたい人は要チェックの内容です!
データを3桁区切りで表示してみる
こんな感じで、桁数の大きな数字が入っているデータフレームがあったとしましょう。
import pandas as pd from numpy.random import default_rng rng = default_rng() df = pd.DataFrame( rng.integers( 100_000 , 100_000_000 , ( 6 , 4 )), columns = [ 'A' , 'B' , 'C' , 'D' ]) df |

普通にJupyterで表示しただけでは、3桁区切りもされていなくて読みにくいですね。
読みやすくするためには、データフレームのスタイルオブジェクトに対してフォーマット文字列の指定をします。
s = df.style s. format ( '{:,d}' ) s |

DataFrame.styleにアクセスすることで、スタイルオブジェクトを得ることができます。
このスタイルオブジェクトは、s.format('{:,d}')
のように書式を指定することができます。書式はstr.format()で採用されているFormat String Syntaxと同じルールです。
実際のデータを変更するわけではないので、その後のデータフレームに対する計算なんかの悪影響にはなりません。
ついでに他にも実務に役立つ書式設定をしてみる
3桁区切りで表示する以外にも、小数点以下桁数の指定や数字の単位表示もしたくなると思うので、そこもついでにやってしまいましょう。
ということで次はこんな感じの収支を想定したデータを使います。
import pandas as pd from numpy.random import default_rng rng = default_rng() df = pd.DataFrame( rng.random(( 6 , 2 )) * 100_000 , columns = [ '売り上げ' , '原価' ]) df[ '利益' ] = df[ '売り上げ' ] - df[ '原価' ] df |

「お金のデータなのに少数の桁がめっちゃあるやん!」って突っ込んだら負けですよ?
このデータを
- 3桁区切り
- 小数点以下2桁に丸め
- 単位「円」を表示
にしてみましょう。
s = df.style s. format ( '{:,.2f}円' ) |

かなり見栄えが良くなりましたね!会社での報告にも十分使えそうです。
でももう少し欲張ると、フォーマットだけでなくスタイルの指定なんかもすることができます。
- マイナスの利益は赤字に
- 利益の左側に線を
- 利益の文字を太字に
といったスタイルを指定してみましょう。
s.applymap( lambda x: 'color:red;' if x < 0 else '') s.set_table_styles({ '利益' : [ { 'selector' : '*' , 'props' : 'border-left: 1px solid gray; font-weight:bold;' }, ], }) |

どうですか、かなり見やすくなりました!