pandas チートシート - DataFrame のデータ抽出方法まとめ

pandas の DataFrame から部分データを抽出する方法のまとめです。

指定した行と列の抽出

基本的に、行と列の 「名称」による抽出には loc プロパティを使い、「数値」による抽出には iloc プロパティを使用します。 下記の例では、インデックス名(行名)に Y1Y5、カラム名(列名)に X1X5 が設定されているものとします。

カテゴリコード抽出のイメージ戻り値の型
スカラー値df.loc["Y3", "X2"]
df.iloc[2, 1]
numpy.float64
など
1 行の抽出df.loc["Y2"]
df.loc["Y2", :]
df.iloc[1]
df.iloc[1, :]
Series
df.loc[["Y2"]]
df.loc[["Y2"], :]
df.iloc[[1]]
df.iloc[[1], :]
DataFrame
複数行の抽出df.loc["Y2":"Y4"]
df.iloc[1:4]
df["Y2":"Y4"]
df[1:4]
DataFrame
df.head(2)DataFrame
df.tail(2)DataFrame
1 列の抽出df.loc[:, "X2"]
df.iloc[:, 1]
df["X2"]
Series
df.loc[:, ["X2"]]
df.iloc[:, [1]]
df[["X2"]]
DataFrame
複数列の抽出df.loc[:, ["X2", "X4", "X5"]]
df.iloc[:, [1, 3, 4]]
df[["X2", "X4", "X5"]]
DataFrame
組み合わせdf.loc["Y3":"Y5", "X2"]
df.iloc[2:5, 1]
Series
df.loc["Y3":"Y5", ["X2"]]
df.iloc[2:5, [1]]
DataFrame
df.loc["Y3":"Y5", "X2":"X4"]
df.iloc[2:5, 1:4]
DataFrame
df.loc["Y3":"Y5", ["X2", "X4"]]
df.iloc[2:5, [1, 3]]
DataFrame

条件指定による行の抽出

コード説明
df[df["X1"] >= 10]
df.query("X1 >= 10")
X1 列の値が 10 以上の行を抽出
df[df["X1"] == 10]
df.query("X1 == 10")
X1 列の値が 10 の行を抽出
df[df["X1"] != 10]
df.query("X1 != 10")
X1 列の値が 10 ではない行を抽出
df[df["X1"] == "AAA"]
df.query("X1 == 'AAA'")
X1 列の値が "AAA" の行を抽出
df[df["X1"].isin(["AAA", "BBB"])]X1 列の値が "AAA" または "BBB" である行を抽出
df[~df["X1"].isin(["AAA", "BBB"])]X1 列の値が "AAA" でも "BBB" でもない行を抽出
df[df["X1"].str.contains("AAA")]X1 列に "AAA" を含む行を抽出
df[~df["X1"].str.contains("AAA")]X1 列に "AAA" を含まない行を抽出
df[df["X1"].notna()]X1 列に値が存在する行を抽出
df[(df["X1"] >= 0) & (df["X1"] < 10)]AND 条件で行を抽出
df[(df["X1"] == 0) | (df["X2"] == "AAA")]OR 条件で行を抽出
df.loc[df["X1"] > 0, ["X1", "X2", "X3"]]行を抽出して、ついでに列を絞り込む

(おまけ)テストデータ

上記の処理を試すための 5 行 5 列のテストデータです。

import numpy as np
import pandas as pd

data = np.arange(1, 26).reshape((5, 5))  # 5x5 の連番データを作成
columns = ["X%d" % i for i in range(1, 6)]  # カラム名
index = ["Y%d" % i for i in range(1, 6)]  # インデックス名
df = pd.DataFrame(data, columns=columns, index=index)

Python の対話シェルに上記をコピペして DataFrame を作成すれば、df["X1"] などの結果を調べることができます。

>>> df
    X1  X2  X3  X4  X5
Y1   1   2   3   4   5
Y2   6   7   8   9  10
Y3  11  12  13  14  15
Y4  16  17  18  19  20
Y5  21  22  23  24  25

>>> df.loc["Y1":"Y3", "X3":"X5"]
    X3  X4  X5
Y1   3   4   5
Y2   8   9  10
Y3  13  14  15