pandasで新しい列を追加する方法|df[‘列名’]・assign・条件付き列追加を初心者向けに解説

CSVを読み込んだあとに、次のように思ったことはありませんか。

  • 「単価」と「数量」から「売上」列を作りたい
  • 点数から「合格」「不合格」の判定列を作りたい
  • 日付列から「月」だけを取り出した列を作りたい
  • df['列名'] = ...assign()locinsert() のどれを使えばよいかわからない
  • 列を追加したはずなのに、元のDataFrameに反映されない

Pandasで新しい列を追加するとき、初心者はまず df['列名'] = 入れたい値 という考え方を覚えるのがおすすめです。

# 基本形(説明用)
# df['列名'] = 入れたい値

既存列から計算したい場合は、次のように書きます。

df['売上'] = df['単価'] * df['数量']

この記事では、Pandasで新しい列を追加する基本、既存列から計算列を作る方法、条件に応じて分類列を作る方法、assign()locinsert() の使い分け、反映されない原因を初心者向けに整理します。

最初からすべての書き方を覚える必要はありません。まずは 普通の列追加は df['列名'] = ...、条件で分けるときは np.where() または loc、処理をつなげたいときは assign() という大枠を押さえれば十分です。

この記事でわかること

この記事では、次の内容を学びます。

  • Pandasで新しい列を追加する基本形
  • 固定値・計算結果・条件判定を新しい列として追加する方法
  • df['列名']assign()locinsert() の使い分け
  • 新しい列が反映されない原因と確認ポイント
  • 追加した列を value_counts()groupby() に活かす流れ

PandasのDataFrameそのものがまだ不安な場合は、先に「Pandas DataFrame入門」で、行・列・インデックスの基本を確認しておくと理解しやすくなります。

先にイメージ:新しい列を追加すると何が変わるのか

新しい列を追加するとは、今あるDataFrameに「分析しやすい情報」を増やすことです。

たとえば、次のように考えるとイメージしやすくなります。

処理前 追加する列 処理後にできること
商品単価数量 がある 売上 商品ごとの金額を確認できる
点数 がある 判定 合格・不合格の件数を数えられる
購入日 がある 購入月 月別に集計しやすくなる
カテゴリ がある 分類メモ 集計や確認の目印にできる

つまり、列追加は「表を横に広げる操作」ですが、目的は列を増やすこと自体ではありません。

次の確認・集計・可視化で使いやすい形にすることが目的です。

Pandas DataFrame入門シリーズでの位置づけ

このページは、Pandasでデータ分析を進めるための前処理記事です。

CSVを読み込んだあと、列名を整えたり、型を直したり、欠損値や表記ゆれを確認したりします。その後で、分析しやすいように「売上」「判定」「月」などの新しい列を作ることがあります。

新しい列を追加できるようになると、value_counts() で件数を確認したり、groupby() で集計したり、Matplotlibでグラフ化したりしやすくなります。

先に結論:新しい列を追加するときの使い分け

新しい列を追加するときは、目的に合わせて書き方を選びます。

ただし、最初から難しく考えなくて大丈夫です。初心者は、まず次の優先度で覚えると迷いにくくなります。

優先度 やりたいこと おすすめの書き方 使う場面
1 新しい列を普通に追加したい df['列名'] = 入れたい値 一番基本。初心者はまずこれでOK
2 既存列から計算列を作りたい df['新列'] = df['列A'] * df['列B'] 単価×数量、売上−費用など
3 条件で値を分けたい np.where() または loc 合格/不合格、高い/低いなど
4 メソッドチェーンで書きたい assign() 処理をつなげて書きたいとき
5 列の位置を指定したい insert() 先頭や特定の位置に列を入れたいとき

初心者が最初に覚えるべき基本は、次の形です。

# 基本形(説明用)
# df['列名'] = 入れたい値

この記事では、まず df['列名'] = ... を中心に理解し、そのあとで assign()locinsert() を「必要な場面だけ」使い分ける流れで解説します。

サンプルデータを作成する

ここでは、CSV読み込み後を想定した小さな売上データを使います。

実務では read_csv() でCSVファイルを読み込むことが多いですが、この記事ではGoogle Colabですぐ試せるように、コード内でDataFrameを作成します。

CSVの読み込みから確認したい場合は、「Google Colab CSV読み込み&保存入門」もあわせて確認してください。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "商品": ["ノート", "ペン", "ファイル", "電卓", "ふせん"],
    "カテゴリ": ["文房具", "文房具", "文房具", "事務用品", "文房具"],
    "単価": [120, 80, 200, 1500, 100],
    "数量": [3, 10, 2, 1, 5],
    "点数": [72, 55, 88, 91, 60],
    "購入日": ["2026-04-01", "2026-04-02", "2026-04-03", "2026-04-04", "2026-04-05"]
})

df
商品 カテゴリ 単価 数量 点数 購入日
0 ノート 文房具 120 3 72 2026-04-01
1 ペン 文房具 80 10 55 2026-04-02
2 ファイル 文房具 200 2 88 2026-04-03
3 電卓 事務用品 1500 1 91 2026-04-04
4 ふせん 文房具 100 5 60 2026-04-05

このDataFrameには、商品名、カテゴリ、単価、数量、点数、購入日が入っています。

ここから、次のような新しい列を追加していきます。

追加したい列 作り方の例 目的
メモ 固定値を入れる 全行に同じ情報を付ける
売上 単価 × 数量 分析用の計算列を作る
判定 点数が60点以上なら合格 条件に応じた分類列を作る
購入月 購入日から月を取り出す 日付を集計しやすくする

このあと、固定値・計算列・条件付き列の順に確認します。

基本:df['列名'] = 入れたい値 で列を追加する

Pandasで新しい列を追加する基本形は、次のように考えます。

# 基本形(説明用)
# df['列名'] = 入れたい値

左側に追加したい列名を書き、右側に入れたい値を書きます。

まずは、全ての行に同じ値を入れる簡単な例から見てみましょう。

df_basic = df.copy()

df_basic["メモ"] = "確認済み"

df_basic
商品 カテゴリ 単価 数量 点数 購入日 メモ
0 ノート 文房具 120 3 72 2026-04-01 確認済み
1 ペン 文房具 80 10 55 2026-04-02 確認済み
2 ファイル 文房具 200 2 88 2026-04-03 確認済み
3 電卓 事務用品 1500 1 91 2026-04-04 確認済み
4 ふせん 文房具 100 5 60 2026-04-05 確認済み

メモ という新しい列が追加され、全ての行に 確認済み が入りました。

このように、1つの値を指定すると、DataFrameの全行に同じ値が入ります。

処理前の列 処理後の列
商品カテゴリ単価数量点数購入日 商品カテゴリ単価数量点数購入日メモ

列を追加するだけなら、この書き方がもっともシンプルです。

固定値を入れた列を追加する

固定値の列は、全ての行に同じラベルやメモを付けたいときに使います。

たとえば、データの出所や処理状態を残したい場合です。

df_fixed = df.copy()

df_fixed["データ種別"] = "サンプル"

df_fixed
商品 カテゴリ 単価 数量 点数 購入日 データ種別
0 ノート 文房具 120 3 72 2026-04-01 サンプル
1 ペン 文房具 80 10 55 2026-04-02 サンプル
2 ファイル 文房具 200 2 88 2026-04-03 サンプル
3 電卓 事務用品 1500 1 91 2026-04-04 サンプル
4 ふせん 文房具 100 5 60 2026-04-05 サンプル

データ種別 列が追加され、全ての行に サンプル が入りました。

固定値を入れる列追加は、次のような場面で使えます。

  • 複数のCSVを結合する前に、どのファイル由来かを示したい
  • 処理済みデータに 確認済み などのメモを入れたい
  • サンプルデータと本番データを区別したい

ただし、列を追加しすぎるとDataFrameが見づらくなります。必要な列だけを追加する意識も大切です。

既存列から計算列を作る

新しい列追加で特によく使うのが、既存列を使って計算列を作る方法です。

たとえば、単価数量 から 売上 列を作る場合は、次のように書きます。

df_sales = df.copy()

df_sales["売上"] = df_sales["単価"] * df_sales["数量"]

df_sales
商品 カテゴリ 単価 数量 点数 購入日 売上
0 ノート 文房具 120 3 72 2026-04-01 360
1 ペン 文房具 80 10 55 2026-04-02 800
2 ファイル 文房具 200 2 88 2026-04-03 400
3 電卓 事務用品 1500 1 91 2026-04-04 1500
4 ふせん 文房具 100 5 60 2026-04-05 500

売上 列が追加され、単価 × 数量 の結果が入りました。

処理前 処理後
単価と数量はあるが、売上はない 単価と数量から売上列を作成
商品ごとの合計金額がすぐには見えない 商品ごとの売上が確認しやすい

このような計算列は、集計や可視化の前処理としてよく使います。

たとえば、あとでカテゴリ別の売上を集計したい場合、先に 売上 列を作っておくと groupby() につなげやすくなります。

df_sales.groupby("カテゴリ")["売上"].sum()
売上
カテゴリ
事務用品 1500
文房具 2060

このように、新しい列を追加する目的は、単に列を増やすことではありません。

分析しやすい形にデータを整えることが目的です。

数値計算がうまくいかない場合は、列が文字列型になっている可能性があります。その場合は、astype() などで型を確認・変換してから計算する流れになります。

条件に応じて分類列を追加する

次に、条件に応じて値を変える列を追加します。

たとえば、点数 が60点以上なら 合格、60点未満なら 不合格 とする 判定 列を作ります。

初心者には、まず np.where() がわかりやすいです。

df_result = df.copy()

df_result["判定"] = np.where(df_result["点数"] >= 60, "合格", "不合格")

df_result
商品 カテゴリ 単価 数量 点数 購入日 判定
0 ノート 文房具 120 3 72 2026-04-01 合格
1 ペン 文房具 80 10 55 2026-04-02 不合格
2 ファイル 文房具 200 2 88 2026-04-03 合格
3 電卓 事務用品 1500 1 91 2026-04-04 合格
4 ふせん 文房具 100 5 60 2026-04-05 合格

点数 に応じて、判定 列が追加されました。

処理前 処理後
点数だけがある 点数から合格/不合格がわかる
条件を毎回見ないと判断できない 判定列で分類しやすい

np.where() は、次の形で考えると理解しやすいです。

# 基本形(説明用)
# np.where(条件, 条件に合うときの値, 条件に合わないときの値)

今回の場合は、次の意味になります。

np.where(df_result["点数"] >= 60, "合格", "不合格")

条件付きで列を追加すると、あとで value_counts() で件数を確認しやすくなります。

df_result["判定"].value_counts()
count
判定
合格 4
不合格 1

このように、分類列を追加してから件数を確認すると、データ全体の特徴をつかみやすくなります。

条件に合う行を抽出する方法を詳しく知りたい場合は、「pandas 条件抽出」の記事につなげると理解しやすいです。今回の記事では、抽出そのものではなく「条件に応じて列の値を作る」ことに絞ります。

日付列から月を作る例|詳しい日付変換はto_datetime記事へ

日付データでは、日付そのものだけでなく、月や曜日を取り出して新しい列にすることがあります。

ここでは、列追加の例として 購入日 から 購入月 を作ります。

日付変換そのものを詳しく解説する章ではなく、日付型に変換したあと、新しい列を作ると分析しやすくなる という位置づけで確認します。

df_date = df.copy()

df_date["購入日"] = pd.to_datetime(df_date["購入日"])
df_date["購入月"] = df_date["購入日"].dt.month

df_date
商品 カテゴリ 単価 数量 点数 購入日 購入月
0 ノート 文房具 120 3 72 2026-04-01 4
1 ペン 文房具 80 10 55 2026-04-02 4
2 ファイル 文房具 200 2 88 2026-04-03 4
3 電卓 事務用品 1500 1 91 2026-04-04 4
4 ふせん 文房具 100 5 60 2026-04-05 4

購入日 から 購入月 列を作ることができました。

日付列を使う場合は、先に pd.to_datetime() で日付型に変換しておくと、.dt.month のような日付用の操作が使いやすくなります。

ただし、この記事の中心は「新しい列を追加する方法」です。日付変換の詳しい考え方、formaterrors='coerce'NaT の扱いは、別記事の「pandas to_datetime()」で確認してください。

df['列名']・assign()・loc・insert()の違い

ここまで見てきたように、列追加の基本は df['新しい列'] = ... です。

ただし、Pandasには他にも列を追加する方法があります。初心者が混乱しやすいので、違いを表で整理します。

書き方 主な用途 初心者向けの考え方
df['新しい列'] = ... 普通に列を追加・上書きする まず覚える基本形
assign() 新しいDataFrameとして列を追加する メソッドチェーン向き
loc 条件に合う行だけ値を入れる 条件付きの代入に便利
insert() 指定した位置に列を追加する 列の場所にこだわるときだけ使う

基本は df['新しい列'] = ... で十分です。

assign()locinsert() は、必要になったときに使い分ければ大丈夫です。

assign()で新しい列を追加する

assign() は、新しい列を追加したDataFrameを返すメソッドです。

メソッドチェーンで処理をつなげたいときに便利です。

まずは、assign()売上 列を作ってみます。

df_assign = df.assign(
    売上 = df["単価"] * df["数量"]
)

df_assign
商品 カテゴリ 単価 数量 点数 購入日 売上
0 ノート 文房具 120 3 72 2026-04-01 360
1 ペン 文房具 80 10 55 2026-04-02 800
2 ファイル 文房具 200 2 88 2026-04-03 400
3 電卓 事務用品 1500 1 91 2026-04-04 1500
4 ふせん 文房具 100 5 60 2026-04-05 500

assign() でも、売上 列を追加できました。

ただし、ここで大事なのは、assign() は元のDataFrameを直接書き換えるというより、列を追加した新しいDataFrameを返すという点です。

そのため、元の df に反映したい場合は、次のように代入します。

df_assigned = df.copy()

df_assigned = df_assigned.assign(
    売上 = df_assigned["単価"] * df_assigned["数量"]
)

df_assigned
商品 カテゴリ 単価 数量 点数 購入日 売上
0 ノート 文房具 120 3 72 2026-04-01 360
1 ペン 文房具 80 10 55 2026-04-02 800
2 ファイル 文房具 200 2 88 2026-04-03 400
3 電卓 事務用品 1500 1 91 2026-04-04 1500
4 ふせん 文房具 100 5 60 2026-04-05 500

assign() は便利ですが、初心者のうちは次のように考えると迷いにくいです。

目的 おすすめ
普通に列を追加したい df['新しい列'] = ...
処理をつなげて書きたい assign()

assign()lambda を使う書き方もありますが、この記事では深入りしません。

まずは、assign() は新しいDataFrameを返すため、元の変数に反映したいなら代入する という点を押さえましょう。ここは「列を追加したのに反映されない」と感じやすいポイントです。

insert()で列の位置を指定して追加する

insert() は、列を追加する位置を指定したいときに使います。

ただし、初心者が最初に覚えるべき方法ではありません。普通に列を追加するだけなら、df['新しい列'] = ... で十分です。

insert() は、作成した列を先頭や特定の位置に置きたい場合だけ使う、と考えると迷いにくくなります。

ここでは、先頭に No 列を追加してみます。

df_insert = df.copy()

df_insert.insert(0, "No", range(1, len(df_insert) + 1))

df_insert
No 商品 カテゴリ 単価 数量 点数 購入日
0 1 ノート 文房具 120 3 72 2026-04-01
1 2 ペン 文房具 80 10 55 2026-04-02
2 3 ファイル 文房具 200 2 88 2026-04-03
3 4 電卓 事務用品 1500 1 91 2026-04-04
4 5 ふせん 文房具 100 5 60 2026-04-05

insert(0, "No", ...) と書いたので、先頭に No 列が入りました。

insert() は次の形で使います。

# 基本形(説明用)
# df.insert(追加する位置, 列名, 入れたい値)

今回の場合は、次の意味です。

# 今回の例
# df_insert.insert(0, "No", range(1, len(df_insert) + 1))

ただし、列の位置を指定する必要がない場合は、無理に insert() を使わなくて大丈夫です。

locで条件に合う行だけ値を入れる

loc は、条件に合う行だけに値を入れたいときに使えます。

ここでは、まず全員を 確認中 にしてから、点数が60点以上の行だけ 合格 に変更してみます。

df_loc = df.copy()

df_loc["判定"] = "確認中"
df_loc.loc[df_loc["点数"] >= 60, "判定"] = "合格"
df_loc.loc[df_loc["点数"] < 60, "判定"] = "不合格"

df_loc
商品 カテゴリ 単価 数量 点数 購入日 判定
0 ノート 文房具 120 3 72 2026-04-01 合格
1 ペン 文房具 80 10 55 2026-04-02 不合格
2 ファイル 文房具 200 2 88 2026-04-03 合格
3 電卓 事務用品 1500 1 91 2026-04-04 合格
4 ふせん 文房具 100 5 60 2026-04-05 合格

loc を使うと、条件に合う行だけを指定して値を入れられます。

np.where()loc のざっくりした使い分けは次の通りです。

方法 向いている場面
np.where() 2択の条件で列を作りたいとき
loc 条件に合う行だけあとから値を入れたいとき

どちらも条件付きで列を作る方法ですが、初心者はまず2択なら np.where()、条件に合う行へ段階的に値を入れたいなら loc と考えるとよいです。

新しい列が反映されない原因

Pandasで列を追加したつもりなのに、思ったように反映されないことがあります。

よくある原因を先に整理します。

原因 起きること 確認ポイント
代入していない 結果を表示しただけで元のDataFrameが変わらない df = ... と代入しているか
列名を打ち間違えた 意図しない別列ができる df.columns で列名を確認
既存列と同じ名前を使った 新規追加ではなく上書きになる 既存列名と重複していないか
値の長さが行数と合わない エラーになる リストの長さと行数が一致しているか
文字列の数値を計算した 計算結果が想定と違う df.dtypes で型を確認

ここから、代表的な例を確認します。

原因1:assign()の結果を代入していない

assign() は、新しいDataFrameを返します。

そのため、結果を元の変数に入れないと、元のDataFrameは変わりません。

df_miss = df.copy()

# これは新しいDataFrameを返しますが、df_missには代入していません
df_miss.assign(売上 = df_miss["単価"] * df_miss["数量"])

# df_miss自体には「売上」列が追加されていません
df_miss
商品 カテゴリ 単価 数量 点数 購入日
0 ノート 文房具 120 3 72 2026-04-01
1 ペン 文房具 80 10 55 2026-04-02
2 ファイル 文房具 200 2 88 2026-04-03
3 電卓 事務用品 1500 1 91 2026-04-04
4 ふせん 文房具 100 5 60 2026-04-05

元のDataFrameに反映したい場合は、次のように代入します。

df_miss = df.copy()

df_miss = df_miss.assign(売上 = df_miss["単価"] * df_miss["数量"])

df_miss
商品 カテゴリ 単価 数量 点数 購入日 売上
0 ノート 文房具 120 3 72 2026-04-01 360
1 ペン 文房具 80 10 55 2026-04-02 800
2 ファイル 文房具 200 2 88 2026-04-03 400
3 電卓 事務用品 1500 1 91 2026-04-04 1500
4 ふせん 文房具 100 5 60 2026-04-05 500

原因2:列名を打ち間違えて別の列ができる

df['列名'] = ... は、指定した列名が存在しない場合、新しい列を作ります。

これは便利ですが、列名を打ち間違えると、意図しない別列が作られることがあります。

df_typo = df.copy()

# 本当は「売上」としたいのに、「売り上げ」と書いてしまった例
df_typo["売り上げ"] = df_typo["単価"] * df_typo["数量"]

df_typo.columns
Index(['商品', 'カテゴリ', '単価', '数量', '点数', '購入日', '売り上げ'], dtype='object')

このようなときは、df.columns で列名を確認しましょう。

列名がわかりにくい場合は、先に rename() で列名を整えてから新しい列を作ると、ミスを減らしやすくなります。

原因3:既存列と同じ名前を書くと上書きになる

df['列名'] = ... は、新しい列を追加するだけでなく、既存列を上書きすることもできます。

たとえば、すでにある 単価 列に別の値を入れると、元の 単価 は上書きされます。

df_overwrite = df.copy()

# 既存の「単価」列を上書きしてしまう例
df_overwrite["単価"] = df_overwrite["単価"] * 1.1

df_overwrite
商品 カテゴリ 単価 数量 点数 購入日
0 ノート 文房具 132.0 3 72 2026-04-01
1 ペン 文房具 88.0 10 55 2026-04-02
2 ファイル 文房具 220.0 2 88 2026-04-03
3 電卓 事務用品 1650.0 1 91 2026-04-04
4 ふせん 文房具 110.0 5 60 2026-04-05

この例では、単価 が1.1倍されています。

これは意図していれば問題ありませんが、新しい列を作りたいだけなら、別の列名を使いましょう。

df['税込単価'] = df['単価'] * 1.1

上書きが不安な場合は、処理前に df.copy() でコピーを作って試すと安心です。

原因4:渡す値の長さが行数と合わない

新しい列にリストを入れる場合、リストの長さはDataFrameの行数と一致している必要があります。

次のコードは、行数とリストの長さが合わないため、エラーになります。

df_length = df.copy()

# このコードはエラーになります。
# df_lengthは5行ですが、リストは3個しかありません。
# df_length["ランク"] = ["A", "B", "C"]

エラーになる例はコメントアウトしています。

リストで列を追加する場合は、次のように行数と同じ長さにします。

df_length = df.copy()

df_length["ランク"] = ["B", "C", "A", "A", "B"]

df_length
商品 カテゴリ 単価 数量 点数 購入日 ランク
0 ノート 文房具 120 3 72 2026-04-01 B
1 ペン 文房具 80 10 55 2026-04-02 C
2 ファイル 文房具 200 2 88 2026-04-03 A
3 電卓 事務用品 1500 1 91 2026-04-04 A
4 ふせん 文房具 100 5 60 2026-04-05 B

行数と同じ長さのリストを渡すと、上から順番に値が入ります。

ただし、初心者のうちは、手作業で長いリストを作るより、既存列から計算したり、条件で作ったりする方がミスを減らしやすいです。

原因5:文字列の数値をそのまま計算しようとしている

CSVから読み込んだデータでは、数値に見えても文字列として扱われていることがあります。

文字列のまま計算しようとすると、思った結果にならないことがあります。

df_str = pd.DataFrame({
    "商品": ["A", "B", "C"],
    "単価": ["100", "200", "300"],
    "数量": [2, 3, 4]
})

df_str.dtypes
0
商品 object
単価 object
数量 int64

単価object になっている場合、文字列として扱われている可能性があります。

計算列を作る前に、数値型へ変換してから計算します。

df_str["単価"] = df_str["単価"].astype(int)
df_str["売上"] = df_str["単価"] * df_str["数量"]

df_str
商品 単価 数量 売上
0 A 100 2 200
1 B 200 3 600
2 C 300 4 1200

このように、列追加の前には、必要に応じて型を確認することも大切です。

型変換について詳しく知りたい場合は、「pandas astype()」の記事につなげると理解しやすくなります。

前処理・集計・可視化の流れで考える

新しい列を追加する操作は、単体で終わるものではありません。

データ分析では、次のような流れの中で使うことが多いです。

  1. CSVを読み込む
  2. head()info() でデータを確認する
  3. rename() で列名を整える
  4. astype()to_datetime() で型を整える
  5. fillna()replace() で欠損値・表記ゆれを整える
  6. 新しい列を追加する
  7. value_counts()groupby() で集計する
  8. Matplotlibで可視化する

つまり、新しい列を追加する処理は、確認済みのデータを、分析しやすい形に変える前処理です。

たとえば、この記事で作った 売上 列は、カテゴリ別の売上集計に使えます。

df_flow = df.copy()

df_flow["売上"] = df_flow["単価"] * df_flow["数量"]

category_sales = df_flow.groupby("カテゴリ")["売上"].sum()

category_sales
売上
カテゴリ
事務用品 1500
文房具 2060

また、判定 のような分類列を作ると、件数確認にも使えます。

df_flow["判定"] = np.where(df_flow["点数"] >= 60, "合格", "不合格")

df_flow["判定"].value_counts()
count
判定
合格 4
不合格 1

このように、新しい列は「分析しやすい形に整えるための前処理」として役立ちます。

単に列を増やすのではなく、次の集計・抽出・可視化で使うために列を作る、と考えると実務でも迷いにくくなります。

補足:apply()や複雑な書き方は最初から使わなくてもよい

列を追加する方法を調べると、apply()assign()lambda を使った例が出てくることがあります。

ただし、初心者が最初からこれらを多用する必要はありません。

まずは、次の方法で十分なことが多いです。

  • 普通の列追加:df['新しい列'] = ...
  • 既存列から計算:df['売上'] = df['単価'] * df['数量']
  • 2択の条件分岐:np.where()
  • 条件に合う行への代入:loc

なお、assign() では lambda を使って列を追加する書き方もあります。また、np.where() を重ねると複数条件にも対応できます。

ただし、これらは少し発展的です。初心者のうちは、まず df['列名'] = ...np.where()loc の基本を押さえてから学ぶのがおすすめです。

この記事では、複雑な apply()lambda、複数条件の詳しい書き方には深入りせず、「新しい列を追加する基本」を優先します。

まとめ

この記事では、Pandasで新しい列を追加する方法を解説しました。

ポイントを整理します。

  • 新しい列を追加する基本は df['列名'] = 入れたい値
  • 既存列から計算列を作る場合は、df['売上'] = df['単価'] * df['数量'] のように書く
  • 条件に応じて値を分ける場合は、まず np.where()loc を使う
  • assign() はメソッドチェーン向きだが、元のDataFrameに反映したい場合は代入が必要
  • insert() は列の位置を指定したいときに使う
  • 列が反映されない場合は、代入忘れ、列名ミス、既存列の上書き、値の長さ、型を確認する
  • 新しい列は、前処理・集計・可視化へ進むための準備として役立つ

初心者は、まず次の順番で覚えると迷いにくいです。

  1. 普通の列追加:df['列名'] = 入れたい値
  2. 既存列から計算列を作る:df['売上'] = df['単価'] * df['数量']
  3. 条件付き列を作る:np.where() または loc
  4. 必要に応じて:assign()insert()

新しい列を作れるようになると、CSVを読み込んだあとの前処理だけでなく、value_counts()groupby()、Matplotlibによる可視化にもつなげやすくなります。

次に読みたい関連記事

今回の記事とあわせて読むと、Pandasの前処理から集計までの流れが理解しやすくなります。

新しい列を追加する前に「列名」「型」「欠損値」「表記ゆれ」を整え、追加した列を value_counts()groupby() に進める流れで読むのがおすすめです。

▲ ページトップへ戻る

コメント

タイトルとURLをコピーしました