pandas の DataFrame から部分データを抽出する方法のまとめです。
指定した行と列の抽出
基本的に、行と列の 「名称」による抽出には loc
プロパティを使い、「数値」による抽出には iloc
プロパティを使用します。
下記の例では、インデックス名(行名)に Y1
〜 Y5
、カラム名(列名)に X1
〜 X5
が設定されているものとします。
カテゴリ | コード | 抽出のイメージ | 戻り値の型 |
---|---|---|---|
スカラー値 | 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