PythonのPandasのlocの使い方について

AI実装検定のご案内

PythonのPandasライブラリにおける .loc は、ラベル(インデックスや列名)に基づいてデータを抽出・操作するための非常に強力なアクセサです。

データ分析では頻繁に使用され、「行や列を条件指定で取り出す」「値を更新する」「フィルタリングする」など、さまざまな用途に活用できます。

目次

.locの基本構文

df.loc[行ラベル, 列ラベル]
  • 行ラベル:取得したい行のインデックスラベルや条件式
  • 列ラベル:取得したい列の名前(ラベル)
  • 両方を省略せずに記述することができ、ラベルベースのアクセスが可能です

基本的な使い方の例

まず簡単なデータフレームを用意します。

import pandas as pd

# ▼ データ準備
data = {
    '名前': ['田中', '佐藤', '鈴木'],
    '年齢': [25, 30, 22],
    '職業': ['エンジニア', 'デザイナー', 'マーケター']
}
df = pd.DataFrame(data, index=['A', 'B', 'C'])

print(" 初期データフレーム:\n", df)

単一行の取得

print("\n① 単一行の取得 df.loc['A']:\n", df.loc['A'])

複数行の取得

print("\n② 複数行の取得 df.loc[['A', 'C']]:\n", df.loc[['A', 'C']])

行と列を指定してデータを取得

print("\n③-1 行と列を指定して1セル取得 df.loc['A', '職業']:\n", df.loc['A', '職業'])
print("\n③-2 複数列を指定 df.loc['B', ['名前', '職業']]:\n", df.loc['B', ['名前', '職業']])

条件式を使ったフィルタリング

年齢が25歳以上の人を抽出。

print("\n④ 年齢が25歳以上の行を抽出 df.loc[df['年齢'] >= 25]:\n", df.loc[df['年齢'] >= 25])

条件を使って特定列だけ取得

print("\n⑤ 年齢が25歳以上の人の名前のみを抽出:\n", df.loc[df['年齢'] >= 25, '名前'])

データの更新

df.loc['A', '年齢'] = 26
print("\n⑥-1 Aさんの年齢を26に更新:\n", df)

df.loc[['A', 'C'], '職業'] = 'アナリスト'
print("\n⑥-2 AとCの職業を'アナリスト'に更新:\n", df)

全行の一部列だけを取得

print("\n⑦ 名前と職業のみ抽出:\n", df.loc[:, ['名前', '職業']])

新しい行を追加(存在しないインデックスに代入)

df.loc['D'] = ['高橋', 28, 'データサイエンティスト']
print("\n⑧ 新しい行Dを追加:\n", df)

.loc.ilocの違い

項目.loc.iloc
参照方法ラベル(名前)ベース整数の位置ベース
行指定df.loc['A']df.iloc[0]
フィルタ式使用可能使用不可(ブールインデックスならOK)
主な用途名前でのアクセスや条件抽出配列的な位置指定アクセス

応用例:複雑な条件フィルタ

例えば「職業がエンジニアまたは年齢が30歳以上の人」の名前を抽出したい場合:

print("\n⑨ 職業がエンジニア または 年齢が30歳以上の名前:\n",
      df.loc[(df['職業'] == 'エンジニア') | (df['年齢'] >= 30), '名前'])

注意点

  • .locでスライス(df.loc['A':'C'])する場合、終了インデックスも含まれます.ilocとは異なる点)。
  • 存在しないラベルを指定するとエラーになります(追加時を除く)。
  • 条件式の括弧 () を忘れるとエラーになることが多いです(優先順位の問題)。

よくある用途まとめ

目的サンプルコード
単一セル取得df.loc['A', '名前']
特定行取得df.loc['B']
複数列取得df.loc[:, ['名前', '年齢']]
条件で抽出df.loc[df['年齢'] > 25]
値の更新df.loc['A', '職業'] = '管理職'
条件で更新df.loc[df['職業'] == 'デザイナー', '年齢'] = 35

以上、PythonのPandasのlocの使い方についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次