Pythonのデータ分析ライブラリ「Pandas」で、データ抽出に使うloc
とiloc
。
初心者が迷いやすいこの2つの違いと、使い分けのコツをわかりやすくまとめました。
▶️ locやilocの公式ドキュメントも参考にしてください:
pandas DataFrame loc Documentation
pandas DataFrame iloc Documentation
筆者の体験談と失敗からの学び
私自身、初めてloc
とiloc
を使ったときに混乱しました。iloc
を使って次のように書いたのですが、エラーになってしまいました。
# 間違った使い方(ilocで列名を指定)
df.iloc[:, ['名前', '年収(円)']]
これはiloc
が「インデックス番号指定」専用であるため、列名を使うとエラーになるのです。
一方で、loc
では次のように書くと問題なく動作します。
# 正しい使い方(locで列名を指定)
df.loc[:, ['名前', '年収(円)']]
改善策として:
私は「locはラベル」「ilocはインデックス」と手元にメモを貼って覚えるようにしました。
また、df.columns
やdf.index
をこまめに確認することで、ラベルと番号の違いを意識できるようになりました。
最初は誰でも間違えるもの。失敗から学ぶことで、より深く理解できます。
1. locとilocの基本
- loc:ラベル名(列名や行名)で指定する
- iloc:インデックス番号(位置)で指定する
2. サンプルデータの作成
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]
})
3. locの使い方
# "名前"列だけ取り出す
df.loc[:, '名前']
# "名前"と"年収(円)"を取り出す
df.loc[:, ['名前', '年収(円)']]
4. ilocの使い方
# 0列目("名前")だけ取り出す
df.iloc[:, 0]
# 0列目と3列目("名前"と"年収(円)")を取り出す
df.iloc[:, [0, 3]]
5. locとilocの使い分けフローチャート
【フローチャート】
「列名・行名を知っている」→ locを使う
「インデックス番号で指定したい」→ ilocを使う
6. まとめ
- 列や行の名前で選ぶなら
loc
- 列や行の番号で選ぶなら
iloc
7. locとilocの実践例
7.1 locを使った条件抽出
# 年収500万円以上の名前と年収を抽出
high_income = df.loc[df['年収(円)'] >= 5000000, ['名前', '年収(円)']]
high_income
7.2 ilocを使った位置指定抽出
# 先頭5行の0列目と3列目を取り出す
top5 = df.iloc[0:5, [0, 3]]
top5
8. locとilocの違いまとめ表
項目 | loc | iloc |
---|---|---|
指定方法 | ラベル名(列名や行名) | インデックス番号 |
範囲指定 | 終了位置も含む | 終了位置は含まない |
列名で指定できる? | できる | できない(エラーになる) |
使いやすい場面 | 列名がわかっているとき | 列番号で一括処理したいとき |
9. ワンポイントアドバイス
locとilocを使い分けられるようになると、Pandasでのデータ操作が驚くほど快適になります!
最初は戸惑っても、実際に手を動かしながら慣れていきましょう!
次回は、データを条件に応じて絞り込む「フィルタリング」の方法を紹介します!
コメント