ここでは 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メソッドについてでした。
最後までお読みいただき、ありがとうございました。