PythonのPandasのデータフレームに新しい列を追加する方法について

Python,イメージ

AI実装検定のご案内

PythonのPandasでデータフレームに新しい列を追加する方法は、非常に柔軟で直感的です。

基本的な構文から、条件付き、関数適用、他の列との計算など、様々なケースがあります。

以下で体系的に詳しく解説していきます。

目次

基本構文:単一の値やリストを使って追加する

import pandas as pd

df = pd.DataFrame({
    '名前': ['佐藤', '鈴木', '高橋'],
    '年齢': [25, 30, 28]
})

# 新しい列「性別」を追加
df['性別'] = ['男性', '女性', '男性']

print(df)

出力

   名前  年齢  性別
0  佐藤  25  男性
1  鈴木  30  女性
2  高橋  28  男性

ポイント

  • リストの長さはデータフレームの行数と一致している必要があります。
  • 単一の値を入れると全行に同じ値が設定されます。
df['国籍'] = '日本'

他の列を使って計算し、新しい列を追加

df['年齢+10'] = df['年齢'] + 10

これは単純な演算ですが、任意の数式や複雑なロジックも可能です。

apply()関数とlambdaで列を追加

複雑な条件やロジックで新しい列を作る場合に便利です。

df['成人判定'] = df['年齢'].apply(lambda x: '成人' if x >= 20 else '未成年')

または、関数を定義してもOK。

def 年齢判定(age):
    return '成人' if age >= 20 else '未成年'

df['成人判定'] = df['年齢'].apply(年齢判定)

複数の列を元にした新しい列

df['紹介'] = df['名前'] + 'さんは' + df['年齢'].astype(str) + '歳です。'

数値列を文字列に変換するには .astype(str) が必要です。

条件付きで列を追加(np.where

複数条件で分類したいときには NumPy の np.where() が便利です。

import numpy as np

df['年齢区分'] = np.where(df['年齢'] >= 30, '30代以上', '20代')

辞書やSeriesを使って列を追加

Seriesを使う

年収 = pd.Series([500, 600, 700], index=[0, 1, 2])
df['年収'] = 年収

辞書を使う

年収 = {0: 500, 1: 600, 2: 700}
df['年収'] = pd.Series(年収)

条件による複雑な分類:assign()locも活用可能

df.loc[df['年齢'] >= 30, 'シニア'] = True
df.loc[df['年齢'] < 30, 'シニア'] = False

もしくは、assign()でチェーン風に書くことも可能。

df = df.assign(年齢グループ=lambda x: np.where(x['年齢'] < 30, '若年層', '中年層'))

新しい列を最後や特定の位置に挿入したい場合

insert()を使うと任意の場所に列を追加できます

df.insert(1, 'ID', [101, 102, 103])  # 1列目にID列を挿入

新しい列を追加しながら既存の列を使わない(ダミーデータなど)

import random
df['乱数'] = [random.randint(0, 100) for _ in range(len(df))]

まとめ:よく使う構文リスト

方法コード例用途
値のリストdf['列名'] = [1, 2, 3]定数や手動データ
単一値df['列名'] = 0全行同じ値
計算df['列名'] = df['A'] + df['B']他列からの生成
条件付きdf['列名'] = df['A'].apply(lambda x: ... )ロジック分岐
np.where()np.where(条件, A, B)より高速で分岐処理向き
insert()df.insert(1, '列名', 値)列の順序を指定
assign()df = df.assign(...)チェーン構文での追加

以上、PythonのPandasのデータフレームに新しい列を追加する方法についてでした。

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

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