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で要素数をカウントする方法についてでした。
最後までお読みいただき、ありがとうございました。