【第6回【初心者向け】Pandasのlocで行や列をラベルで抽出する基本操作をやさしく解説【図解あり】

今回は、Pythonのデータ分析ライブラリ「Pandas」を使って、特定の列や行を抽出する方法について解説します。
DataFrameから欲しいデータだけを取り出すために、知っておきたい基本操作をまとめました。

サンプルデータの作成

import pandas as pd

df = pd.DataFrame({
    "名前": ["太郎", "花子", "次郎", "美香", "健一", "恵子", "翔", "茜", "隆", "葵"],
    "年齢": [23, 29, 35, 42, 18, 33, 27, 24, 31, 30],
    "職業": ["エンジニア", "デザイナー", "教師", "医師", "学生", "看護師", "プログラマー", "販売員", "弁護士", "研究者"],
    "年収(円)": [4500000, 5500000, 4900000, 7300000, 0, 4000000, 6000000, 3200000, 8000000, 5800000],
    "居住地": ["東京", "大阪", "名古屋", "札幌", "福岡", "東京", "神戸", "仙台", "横浜", "千葉"],
    "勤続年数": [2, 4, 10, 15, 1, 5, 3, 1, 12, 8]
})
df
名前 年齢 職業 年収(円) 居住地 勤続年数
0 太郎 23 エンジニア 4500000 東京 2
1 花子 29 デザイナー 5500000 大阪 4
2 次郎 35 教師 4900000 名古屋 10
3 美香 42 医師 7300000 札幌 15
4 健一 18 学生 0 福岡 1
5 恵子 33 看護師 4000000 東京 5
6 27 プログラマー 6000000 神戸 3
7 24 販売員 3200000 仙台 1
8 31 弁護士 8000000 横浜 12
9 30 研究者 5800000 千葉 8

 特定列の抽出

 1列だけ抽出

df['名前']

出力例:

名前
0 太郎
1 花子
2 次郎
3 美香
4 健一
5 恵子
6
7
8
9

※このように、DataFrameの中の「名前」列だけが順番に取り出されます。

複数列を抽出

df[['名前', '年収(円)']]
名前 年収(円)
0 太郎 4500000
1 花子 5500000
2 次郎 4900000
3 美香 7300000
4 健一 0
5 恵子 4000000
6 6000000
7 3200000
8 8000000
9 5800000

特定行の抽出

範囲指定(インデックス番号)

df[0:1]   # 1行目のみ
名前 年齢 職業 年収(円) 居住地 勤続年数
0 太郎 23 エンジニア 4500000 東京 2
df[0:3]   # 1〜3行目まで(0,1,2行目が対象)
名前 年齢 職業 年収(円) 居住地 勤続年数
0 太郎 23 エンジニア 4500000 東京 2
1 花子 29 デザイナー 5500000 大阪 4
2 次郎 35 教師 4900000 名古屋 10

失敗談

行毎や列毎に抜き出せるなら、df[0:3, ['列1', '列2']]のように、行と列を同時に抜き出すことを試みましたが、できませんでした。この場合は、後述するlocを使いましょう。

 locの利用(ラベル名指定)

 特定列を抽出

df.loc[:, '名前']           # 全行から「名前」列のみ
名前
0 太郎
1 花子
2 次郎
3 美香
4 健一
5 恵子
6
7
8
9
df.loc[:, ['名前', '年収(円)']]  # 全行から「名前」と「年収(円)」列を選択
名前 年収(円)
0 太郎 4500000
1 花子 5500000
2 次郎 4900000
3 美香 7300000
4 健一 0
5 恵子 4000000
6 6000000
7 3200000
8 8000000
9 5800000

 特定の行と列を抽出

df.loc[0:2, ['名前', '年収(円)']]  # 先頭3行&特定列だけ抽出
名前 年収(円)
0 太郎 4500000
1 花子 5500000
2 次郎 4900000

失敗談

次のようなコードを書いてしまい、エラーが出ました。

df.loc[0:3, '名前', '年齢']  # 間違い:列はリストで指定すべき

正しくは、以下のように列名はリスト形式で渡す必要があるのです:

df.loc[0:3, ['名前', '年齢']]

このミスはとても初歩的ですが、何度も繰り返してしまいました。その結果、私はlocの使い方について、メモ帳に「行は範囲指定、列はリスト」と書いて貼っておくようにしました。

改善策: コードの構文エラーが出たら「一度、公式ドキュメントを確認する」「列名は必ずリストにする」ことを徹底する。

とはいえ、初心者のうちは、間違えるのが当たり前。焦らず確認を重ねることが大切です。

▶️ locの公式ドキュメントも参考にしてください:
pandas DataFrame loc Documentation

 df.columns や df.index を併用しよう

DataFrameの構造確認にも便利な属性です。

  • df.columns:データフレームの列名を確認できます。
  • df.index:インデックス(行ラベル)を確認できます。
# カラム名を一覧表示
df.columns
# 出力例: Index(['名前', '年齢', '職業', '年収(円)', '居住地', '勤続年数'], dtype='object')

# インデックス情報を確認
df.index
# 出力例: RangeIndex(start=0, stop=10, step=1)

▶️ columnsとindexの公式ドキュメントも参考にしてください:
pandas DataFrame columns Documentation
pandas DataFrame index Documentation

まとめ

  • 列だけを抽出 → df['列名'] または df[['列1', '列2']]
  • 行だけを抽出 → df[0:3](インデックス番号指定)
  • 行と列を細かく指定 → df.loc[行範囲, 列範囲]を使う
  • 構造確認には df.columnsdf.index も活用しよう!

次回は、インデックス番号で選択できるilocについて詳しく解説します。
(locはラベル名、ilocは番号ベース。使い分けができるとさらに便利です!)

▲ ページトップへ戻る

コメント

タイトルとURLをコピーしました