【第7回】【初心者向け】Pandasのilocでインデックス番号から行・列を抽出する方法を解説

今回は、Pythonのデータ分析ライブラリ「Pandas」を使って、インデックス番号でデータを抽出する方法(ilocについて解説します。

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

locは「ラベル名」で指定しましたが、ilocは「番号」で行や列を選びます。

1. サンプルデータの作成

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]
})

2. 特定行の抽出

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

df.iloc[0:3]

出力例:


    名前  年齢      職業    年収(円) 居住地 勤続年数
0  太郎  23  エンジニア  4500000 東京    2
1  花子  29  デザイナー  5500000 大阪    4
2  次郎  35      教師  4900000 名古屋  10

開始位置は含み、終了位置は含まないので、0, 1, 2行目が対象になります。

3. 特定列の抽出

3.1 1列だけ抽出する

df.iloc[:, 0:1]

出力例:


    名前
0  太郎
1  花子
2  次郎
...(以下続く)

全行から「名前」列(0列目)だけを取り出す操作です。

3.2 複数列を抽出する

df.iloc[:, [df.columns.get_loc('名前'), df.columns.get_loc('年収(円)')]]

出力例:


    名前   年収(円)
0  太郎  4500000
1  花子  5500000
2  次郎  4900000
...(以下続く)

get_loc()は、「列名から番号(位置)を取得する関数」です。これにより列名を使わずに番号で柔軟に指定できるので、列数が多いデータにも便利です。

筆者の失敗談と改善策

初めてilocを使ったとき、私はdf.iloc[:, ['名前', '年収(円)']]と書いてエラーを出してしまいました。

このようにilocでは列名を使えず、番号だけを使う必要があるという基本を見落としていたのです。

# 誤りの例:ilocで列名を使っている(エラーになる)
df.iloc[:, ['名前', '年収(円)']]

# 正しい書き方(番号を使う)
df.iloc[:, [0, 3]]

改善策:「loc = ラベル名」「iloc = インデックス番号」という使い分けを常に意識して、エラーが出たときにはまずデータ型を確認するようにしています。

エラーを恐れず、しっかり原因を調べる姿勢が大切です。

4. locとilocの違いに注意

locではラベル(列名)で指定できますが、ilocは番号のみです。

# locの場合
print(df.loc[:, '名前'])  # OK
print(df.loc[:, ['名前', '年収(円)']])  # OK

# ilocの場合
print(df.iloc[:, 0])  # 0列目(名前)
print(df.iloc[:, [0, 3]])  # 「名前」と「年収(円)」列(それぞれ0番・3番)

※ ilocでは文字列(列名)は使えません!

まとめ

  • ilocは「位置番号」で行や列を選択する
  • 範囲指定では開始位置を含み、終了位置は含まない
  • 列名ではなく、列番号やインデックスを使う
  • 複数列選択時はリストでまとめる

覚え方: loc = ラベル名、 iloc = インデックス番号

補足:ilocが便利な場面

  • 列名が長かったり、覚えづらいとき
  • インデックス番号だけで素早くデータを取り出したいとき
  • 列名が途中で変わる可能性があるデータに対して処理するとき

次回は、条件に基づく行の抽出(フィルタリング)について詳しく解説します!

▲ ページトップへ戻る

コメント

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