python

pandasのDataFrameデータを3桁区切りで表示する方法

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;'},
    ],
})

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

-python

© 2022 ヂまるBlog