Pandasで「行を指定して操作する方法」には、いくつかの代表的なやり方があります。
ここでは基本から応用まで体系的に解説します。
目次
行を指定する基本的な方法
インデックス番号で指定
import pandas as pd
df = pd.DataFrame({
"名前": ["田中", "佐藤", "鈴木", "高橋"],
"年齢": [25, 30, 28, 35],
"職業": ["エンジニア", "デザイナー", "営業", "マーケティング"]
})
# 先頭の行(0番目)
print(df.iloc[0])
# 2行目から3行目まで
print(df.iloc[1:3])
iloc
は「行番号」で指定する方法です。Pythonのリストスライスと同じルールで動作します。iloc[0]
→ 0番目の行iloc[1:3]
→ 1行目から2行目(3は含まれない)
インデックスラベルで指定
# 行にラベルを付け直す
df = pd.DataFrame({
"名前": ["田中", "佐藤", "鈴木", "高橋"],
"年齢": [25, 30, 28, 35],
"職業": ["エンジニア", "デザイナー", "営業", "マーケティング"]
}, index=["a", "b", "c", "d"])
print("\n=== locで行を指定 ===")
print("ラベルaの行:\n", df.loc["a"])
print("ラベルaとcの行:\n", df.loc[["a", "c"]])
loc
は「インデックスラベル」で指定する方法です。loc["a"]
→ ラベルa
の行loc[["a", "c"]]
→ 複数のラベルをリストで指定
条件で行を指定して操作する方法
条件を満たす行だけ抽出・操作するのもよく使われます。
print("\n=== 条件で行を抽出 ===")
print("年齢が30以上の行:\n", df[df["年齢"] >= 30])
# 条件を満たす行を更新
df.loc[df["年齢"] >= 30, "職業"] = "マネージャー"
print("\n年齢30以上の人の職業を変更:\n", df)
df[df["年齢"] >= 30]
→ 条件フィルタで抽出loc[条件, 列名] = 値
→ 条件を満たす行に対して更新
行の追加・削除
行の追加
print("\n=== 行を追加 ===")
df.loc["e"] = ["山田", 40, "ディレクター"]
print(df)
行の削除
print("\n=== 行を削除 ===")
df = df.drop("b") # ラベルで削除
print("ラベルbを削除:\n", df)
df = df.drop(df.index[0]) # 行番号で削除
print("0番目の行を削除:\n", df)
複雑な操作例
複数条件で行を抽出
print("\n=== 複数条件で抽出 ===")
df = pd.DataFrame({
"名前": ["田中", "佐藤", "鈴木", "高橋"],
"年齢": [25, 30, 28, 35],
"職業": ["エンジニア", "デザイナー", "営業", "マーケティング"]
})
print(df[(df["年齢"] >= 30) & (df["職業"] == "デザイナー")])
行の一括変換
print("\n=== 行の一括変換 ===")
df["年齢"] = df["年齢"] + 1
print(df)
行をシャッフル
print("\n=== 行をシャッフル ===")
df = df.sample(frac=1).reset_index(drop=True)
print(df)
よくある用途別まとめ
- 行番号でアクセス →
iloc
- ラベルでアクセス →
loc
- 条件で抽出・更新 →
df[条件]
やloc[条件, 列名]
- 行の追加 →
df.loc[new_index] = [...]
- 行の削除 →
df.drop()
以上、Pandasで行を指定して操作する方法についてでした。
最後までお読みいただき、ありがとうございました。