Skip to content

Pandas DataFrame に新しい列を追加する方法(例とベストプラクティス付き)

Updated on

Pandas DataFrame を扱うとき、列を追加する操作は最もよく行われる処理の 1 つです。計算列を作成したり、特定の位置に列を挿入したり、動的に DataFrame を構築したりする場合など、Pandas にはそれを簡単に実現するための強力な方法がいくつも用意されています。

この 2025 年版ガイドでは、次の内容を扱います。

  • 新しい列を追加する 6 つのベストな方法
  • 各メソッドを使うべきタイミング
  • 既存データに基づく列の追加
  • よくあるミスの回避方法(例: SettingWithCopyWarning)
  • 実務的なサンプル

⭐ クイックヒント: DataFrame をインタラクティブな可視化ツールに変える

DataFrame をすぐに可視化したいですか?

PyGWalker を使えば、任意の Pandas または Polars DataFrame を、Jupyter Notebook 上で動く インタラクティブな Tableau 風 UI に変換できます。

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
KaggleColabGitHub
Run PyGWalker in Kaggle (opens in a new tab)Run in Google Colab (opens in a new tab)Give us a ⭐️ (opens in a new tab)

Pandas DataFrame とは?

DataFrame は、Excel や SQL テーブルのような 2 次元のラベル付きテーブル(行 + 列)です。Pandas では次のようなソースから DataFrame を作成できます。

  • CSV
  • Excel
  • SQL
  • JSON
  • Python のリスト & 辞書

さらに、それらを操作・分析するための強力な API が用意されています。


📌 Pandas で新しい列を追加する方法(概要)

Method適した用途Example
1. Assignment (df['col'] = ...)もっとも一般的・シンプルなケースdf['salary'] = ...
2. Insert column (df.insert)特定の位置に列を挿入したいときdf.insert(1, 'x', ...)
3. Assign (df.assign)メソッドチェーンを使いたいときdf = df.assign(x=...)
4. Concat (pd.concat)複数列をまとめて追加したいときpd.concat([df, df2], axis=1)
5. Based on existing columns実務での変換処理・派生列の作成df['age2'] = df['age'] * 2
6. Conditional columnsif-else 的な条件ロジックを使うときnp.where(...)

それぞれの方法を例とともに見ていきます。


1. 方法: シンプルな代入(ほとんどの用途に最適)

df['NewColumn'] = [1, 2, 3, 4]

▶ 例

df['Salary'] = [50000, 60000, 70000, 80000]

使う場面:

  • 最も一般的で、かつシンプルな方法
  • 定数・リスト・配列・計算結果などを列として追加するとき

メモ:

  • すでに同名の列がある場合は上書きされる
  • 非常に効率的

2. 方法: 特定の位置に列を挿入する (df.insert)

df.insert(loc=1, column='Department', value=['IT', 'HR', 'Finance', 'Admin'])

使う場面:

  • 列の順序を厳密にコントロールしたいとき
  • レポートやエクスポート用に、決まった構造のデータを作りたいとき

3. 方法: assign を使って列を追加(関数型 / チェーンスタイル)

df = df.assign(Tax=lambda x: x['Salary'] * 0.1)

利点:

  • メソッドチェーン(df.query(...).assign(...).groupby(...) など)との相性が良い
  • 代入しない限り元の DataFrame を直接変更しない

4. 方法: pd.concat で列を追加する

df2 = pd.DataFrame({'Bonus': [1000, 2000, 2500, 1800]})
df = pd.concat([df, df2], axis=1)

使う場面:

  • 複数 の新しい列をまとめて追加するとき
  • 2 つの DataFrame を横方向に結合したいとき

避けるべき場面:

  • 列を 1 つだけ追加したい場合 → 代入のほうが高速でシンプル

5. 既存列に基づいて新しい列を追加する(実務的な例)

これは 最もよくあるユースケース であり、元の記事では触れられていませんでした。

例: 合計スコア列を作成する

df['Total'] = df['Math'] + df['Science'] + df['English']

例: 値を正規化する

df['Age_Norm'] = df['Age'] / df['Age'].max()

6. 条件付き列(np.where やブーリアンマスク)

例: 「Senior」フラグ列を追加する

import numpy as np
df['Senior'] = np.where(df['Age'] >= 35, 'Yes', 'No')

ブーリアンマスク版

df['IsAdult'] = df['Age'] > 18

使う場面:

  • クラス分類用のラベル列を作るとき
  • True / False や Yes / No のような二値条件を表現するとき

既存の列を上書きする

はい、シンプルな代入で上書きできます。

df['Age'] = [26, 31, 36, 41]

列名に基づいて特定位置に列を挿入する

df.insert(df.columns.get_loc("Age"), 'Score', [1, 2, 3, 4])

既存の列名に依存して列順を決めたい(例: 自動パイプライン)ときに便利です。


⚠ よくあるミス: SettingWithCopyWarning

DataFrame を不適切な方法でスライスすると、次のようなコードで警告が出ることがあります:

subset = df[df['Age'] > 30]
subset['Flag'] = 1   # Warning!

修正方法:

subset = df[df['Age'] > 30].copy()
subset['Flag'] = 1

まとめ

Pandas で新しい列を追加するための 6 つの基本メソッド を紹介しました。

  • シンプルな代入(まず最初に選ぶべき基本手段)
  • 厳密な列順が必要なときの insert
  • メソッドチェーン向けの assign
  • DataFrame を結合するときの concat
  • 既存列の計算に基づく列
  • 条件ロジックに基づく列

これらを使い分けることで、DataFrame を効率的に操作でき、よくある落とし穴も避けられます。


FAQ(SEO・ユーザーサポート用)

1. 同じ値を持つ列を追加するには?

df['Source'] = 'System'

2. 関数に基づいて列を追加するには?

df['Score'] = df.apply(lambda x: x['Math'] * 0.6 + x['English'] * 0.4, axis=1)

3. 複数列を一度に追加するには?

df[['A', 'B']] = df[['X', 'Y']] * 2

4. 最も高速な方法は?

通常は、シンプルな代入(df['col'] = ...)が最も効率的です。