HOWTO · Pandas
Pandas DataFrame の行数を取得する方法
Pandas DataFrame の行数を取得する方法を紹介します。shape で行数と列数を区別し、len() やインデックスを使う方法、条件に一致する行を数える方法も説明します。
このページの内容
Pandas DataFrame の行数を取得するには、df.shape[0] または len(df) を使います。shape 属性は行数と列数の両方を返します。最初の値が行数、2番目の値が列数です。条件に一致する行だけを数えるには、Boolean マスクを合計します。
DataFrame.shape で行数と列数を取得する
DataFrame.shape は、(行数, 列数) の順でタプルを返す属性です。行数にはインデックス 0、列数にはインデックス 1 を指定します。両方の次元を確認したい場合や、特定の列の値を数えずに行数を取得したい場合に便利です。
次の例では、小さな DataFrame を作成し、行数と列数の両方を表示します。
import pandas as pd
data = {
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"City": ["New York", "Los Angeles", "Chicago"],
}
df = pd.DataFrame(data)
print("Rows:", df.shape[0])
print("Columns:", df.shape[1])
行数だけを取得する場合は、df.shape[0] を使います。この用途で df.shape[1] を使わないでください。これは列数を返すため、3行3列の表では行数と列数が同じに見えてしまいます。
len() またはインデックスで行数を取得する
Python の組み込み関数 len() に DataFrame を渡すと、行数を取得できます。つまり、len(df) と書きます。行数だけが必要な場合に簡潔な方法です。len(df.index) でも、DataFrame の行インデックスの長さを測ることで同じ行数を取得できます。len(df.axes[0]) は行方向の軸の長さを返します。列数を取得する len(df.axes[1]) は、df.shape[1] に相当します。
これらの方法ではインデックスのラベルに関係なく行数を数えます。特定の列の欠損値を除いた値の数を数えるわけではありません。欠損値を含まない行を数えるには、まず df.dropna() でデータを絞り込み、len(df.dropna()) を使います。既定では、dropna() はいずれかの列に欠損値がある行を削除します。特定の列だけを対象にするには、subset=["Age"] を渡します。
DataFrame に対して .len() を呼び出す必要はありません。len() は Python の関数なので、df.len() や .len(df.index) ではなく len(df) と書きます。絞り込み後の DataFrame など、数えたい対象と同じ DataFrame を計算式に使ってください。
条件に一致する行を数える
列との比較から Boolean マスクを作り、そのマスクに .sum() を呼び出します。Boolean Series では、それぞれの True が 1、False が 0 として扱われるため、合計すると条件に一致する行数が得られます。このベクトル化された方法は、1つの条件を数えるときに使いやすく、複数の条件にも応用できます。
import pandas as pd
df = pd.DataFrame({"Name": ["Alice", "Bob", "Charlie"], "Age": [25, 30, 35]})
is_over_28 = df["Age"] > 28
matching_rows = is_over_28.sum()
print(matching_rows)
複数の条件を比較する場合は、それぞれの比較式を括弧で囲み、AND には &、OR には | を使って組み合わせます。たとえば (df["Age"] > 28) & (df["Age"] < 35) は、年齢が両方の範囲条件を満たす行を選びます。結果のマスクを合計すると、その行数を取得できます。Pandas Series 全体を組み合わせるときに、Python の and や or を使わないでください。
重複を除いた行を数えるには、数える前に重複を削除します。len(df.drop_duplicates()) を使います。重複したレコードは drop_duplicates() の後に1件として扱われるため、これはすべての行を数える場合とは異なる結果になります。全行、条件に一致する行、重複を除いたレコードのどれを数えたいかに応じて式を選んでください。