pandas.value_counts() と、collections.Counter の処理時間を比較してみた


Pandas は便利ですが、処理速度が・・・とよく耳にします。

Pandas のユニークな要素の個数をカウントする value_counts() と、Python標準ライブラリの collections.Counter で処理時間を比較してみました。

コードはこちら

import collections
import pandas as pd
import random

サンプルデータとしてランダムな整数2億個の list を作成します。

hoge_list = [random.randint(0, 9999) for i in range(200000000)]

リスト作成に 92.8秒 を要しました。

hoge_df = pd.DataFrame(hoge_list)

リストから DataFrame への変換に 19.0秒 を要しました。

c2 = hoge_df.value_counts()

print(c2.iloc[:3])
print(c2.iloc[-3:])

出力:
9427 20501
6629 20482
5215 20475
dtype: int64
3637 19523
4647 19505
3036 19420
dtype: int64

c1 = collections.Counter(hoge_list)

print(c1.most_common()[:3])
print(c1.most_common()[-3:])

出力:
[(9427, 20501), (6629, 20482), (5215, 20475)]
[(3637, 19523), (4647, 19505), (3036, 19420)]

結果

list collections.Counter 9.1秒

DataFrame変換済み value_counts 1.7秒

ただし list -> DataFrame への変換 19.0秒

単純にユニークな要素の個数をカウントするところだけをみると value_counts の方が早いようです。

以上になります、最後までお読みいただきありがとうございました。

参考サイト

https://note.nkmk.me/python-pandas-value-counts/

https://note.nkmk.me/python-collections-counter/

https://mebee.info/2020/11/04/post-21879/