PythonのPandasのinsertメソッドについて

Python,イメージ

AI実装検定のご案内

ここでは PythonのPandasにおけるinsertメソッド について、できるだけ詳しく解説します。

単なる使い方だけでなく、実用例・注意点・似た機能との違いまでまとめます。

目次

基本概要

DataFrame.insert() は、指定した位置(列の順番)に新しい列を挿入するメソッド です。

単純に列を追加するだけなら df['new_col'] = ... でも可能ですが、insertを使うと列の順序を明示的にコントロールできます。

引数の説明

  • loc (int)
    新しい列を挿入する位置。
    0 が最初の列、len(df.columns) が最後の列の次。
    例: loc=1 なら2列目に入る。
  • column (str or object)
    新しい列名。通常は文字列。
    既存列と同じ名前にしたい場合は、後述のallow_duplicatesをTrueにする必要あり。
  • value (array-like, Series, scalar)
    新しい列に入れる値。
    • 長さがDataFrameの行数と一致するリストや配列
    • pd.Series(indexが自動でalignされる)
    • スカラ値(すべての行に同じ値が入る)
  • allow_duplicates (bool, default=False)
    デフォルトはFalse。同じ名前の列がすでにある場合はエラーになる。
    Trueにすると同じ列名を追加できる(ただし可読性は下がるので注意)。

基本的な使い方

# 基本例:insertの使い方まとめ
import pandas as pd

df = pd.DataFrame({
    "A": [1, 2, 3],
    "B": [4, 5, 6]
})

print("初期df:\n", df, "\n")

# 例1: リストから列を挿入(Aの後にX列)
df1 = df.copy()
df1.insert(loc=1, column="X", value=[10, 20, 30])
print("例1: Aの後にXを挿入:\n", df1, "\n")

# 例2: スカラ値を挿入(先頭にConst列)
df2 = df.copy()
df2.insert(loc=0, column="Const", value=100)  # 全行100
print("例2: 先頭にConst=100を挿入:\n", df2, "\n")

# 例3: Seriesを挿入(indexで自動アライン)
df3 = df.copy()
s = pd.Series([7, 8, 9], index=[0, 1, 2])
df3.insert(loc=2, column="S", value=s)
print("例3: Seriesを挿入(indexアライン):\n", df3, "\n")

よくある落とし穴・注意点

  • 既存列名と重複 → エラー df.insert(1, "A", [10, 20, 30])ValueError: cannot insert A, already exists
    解決策: allow_duplicates=True を指定。
  • 列数が合わない場合 → エラー df.insert(1, "New", [1, 2]) # dfは3行ValueError: Length of values does not match length of index
  • パフォーマンス上の注意
    列数が多いDataFrameに何度もinsertを使うと、内部で列の並び替えが行われるためコストがかかる。
    大規模データでは assign や列の順序入れ替えを使ったほうが効率的。

insert と他の列追加方法の比較

方法特徴列の位置指定
df['col'] = ...シンプルで直感的常に最後尾
df.assign(col=...)チェーン可能で関数型スタイル常に最後尾
df.insert(...)任意の位置に挿入できる可能
pd.concat([df, new_col], axis=1)複数列を一度に追加可能並び替え工夫で対応

実用的な活用例

計算列を元データの横に挿入

import pandas as pd

df = pd.DataFrame({
    "product": ["A", "B", "C"],
    "price": [100, 200, 150],
    "qty":   [3,   2,   5]
})

# 売上額(price * qty)を"price"の直後に挿入したい
sales = df["price"] * df["qty"]
df_calc = df.copy()
loc_after_price = df_calc.columns.get_loc("price") + 1
df_calc.insert(loc=loc_after_price, column="sales", value=sales)

print(df_calc)

ダミー変数の列をまとめて挿入

import pandas as pd

df = pd.DataFrame({"category": ["red", "blue", "red"]})

dummies = pd.get_dummies(df["category"], prefix="cat")
df2 = df.copy()
# category列の直後から、ダミー列を順番に挿入
base_loc = df2.columns.get_loc("category") + 1
for i, col in enumerate(dummies.columns):
    df2.insert(loc=base_loc + i, column=col, value=dummies[col])

print(df2)

複数列をまとめて制御したい場合

insert をループで使うと列順を自在に設計可能。

レポート用のDataFrame作成や、出力フォーマットが厳密に決まっている場合に便利。

まとめ

  • insert列を好きな場所に追加する唯一のメソッド
  • 引数は loc(位置), column(名前), value(データ), allow_duplicates
  • df['col'] = ...assign よりも柔軟だが、使いすぎるとパフォーマンス低下に注意。
  • 出力フォーマットやレポート用の列順が重要な場面で特に役立つ。

以上、PythonのPandasのinsertメソッドについてでした。

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

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