あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pandasでプログレスバーを出したい(tqdmを用いる)

分析でPandasを用いる場合、 量の多い行列方向の処理をしたいときに進捗を可視化したいことがあります。
Pythonのforループでプログレスバーを出すのにはtqdmを用いますが、

esu-ko.hatenablog.com

pandasでも同様にtqdmを用いることができます。

pandasのメソッド プログレスバーを出すtqdmメソッド
apply progress_apply
applymap progress_map

セットアップ

import pandas as pd
from tqdm import tqdm

#セットアップ
tqdm.pandas()

applyへの使い方

使い方は普通のapplyと同様です。

df = pd.DataFrame(
    [
        [1,2],
        [1,2],
        [1,2]
    ],
    columns = ['a','b']
)

#列単位の集計:axis=0
#処理された列数が進捗
df.progress_apply(sum,axis=0)

#出力
#100%|██████████| 2/2 [00:00<00:00, 395.17it/s]

#行単位の集計:axis=1
#処理された行数が進捗
df.progress_apply(sum,axis=1)

#出力
#100%|██████████| 3/3 [00:00<00:00, 414.95it/s]

出力を見ると分かる通り、一つ目(axis=0)は2列処理しています。
二つ目は3行分です。

applymapへの使い方

各カラムに対して処理をするapplymapprogress_mapを用います。

df.progress_map(lambda x : x**2)

注意点として、progress_mapapply_mapの置き換えで、pandasの文字列の置き換えに使うmapの置き換えではありません。