Pandasで「要素数をカウントする」方法はいくつかあり、データの構造や目的に応じて適切な関数を選ぶことが重要です。
ここでは代表的な手法を、サンプルコードとともに詳しく解説します。
目次
Series.value_counts()
最もよく使われる方法です。
カテゴリデータや文字列データの出現頻度を数えるのに適しています。
import pandas as pd
data = pd.Series(["apple", "banana", "apple", "orange", "banana", "apple"])
print(data.value_counts())
特徴
- デフォルトで降順に並ぶ
normalize=Trueを指定すると割合に変換できるsort=Falseにすると元の順序を保つ
print(data.value_counts(normalize=True))
apple 0.5
banana 0.333333
orange 0.166667
ataFrame.value_counts()
DataFrame 全体や複数列をまとめてカウントする場合に有効です。
df = pd.DataFrame({
"fruit": ["apple", "banana", "apple", "orange", "banana", "apple"],
"color": ["red", "yellow", "red", "orange", "yellow", "green"]
})
print(df.value_counts())
応用
- 特定の列だけ指定してカウントする場合は
df["列名"].value_counts()を使う - 複数列を指定する場合は
df[["col1","col2"]].value_counts()
groupby().size()
カテゴリごとに集計したい場合に便利。groupbyと組み合わせると柔軟にカウントできます。
print(df.groupby("fruit").size())
複数列でグループ化も可能です。
print(df.groupby(["fruit", "color"]).size())
count() と len() の違い
要素数を求めるときに混同しやすいので整理しておきます。
len(df): DataFrameの行数を返すdf.count(): 列ごとに欠損値(NaN)を除いた要素数を返す
print(len(df)) # 6 (行数)
print(df.count()) # fruit=6, color=6 (NaNがあれば除外)
collections.Counter を活用
Python標準ライブラリの Counter を使えば、Series を直接処理できます。
from collections import Counter
counts = Counter(df["fruit"])
print(counts)
Pandasのメソッドより柔軟に辞書形式で扱えるため、カスタム処理に便利です。
まとめ
- シンプルに頻度を知りたい →
value_counts() - 複数列を組み合わせてカウントしたい →
DataFrame.value_counts()orgroupby().size() - 欠損を考慮した列ごとの要素数 →
count() - 全行数 →
len(df) - 辞書的に扱いたい →
collections.Counter
以上、PythonのPandasで要素数をカウントする方法についてでした。
最後までお読みいただき、ありがとうございました。
