1. データを「加工」する
データを読み込んで眺めたら、次は分析しやすい形に加工します。よくある加工は次のようなものです。
- 新しい列を作る(身長と体重からBMIを計算する など)
- 値を判定・分類する(SBPから「正常/高い」のラベルを付ける など)
- コードを名称に変換する(病棟コード 1→「A病棟」 など)
- 型をそろえる(文字列の数字を数値に変換する など)
これらはすべて、「列を作る・変える」操作です。pandasなら、どれも数行で書けます。
2. 計算で新しい列を作る
新しい列を作る一番簡単な方法は、df["新しい列名"] = 計算式 です。
既存の列同士の計算結果を、そのまま新しい列として追加できます。
💡 列同士の計算は「行ごと」に行われる:
df["体重"] / df["身長"]**2 は、各行(各患者)ごとに計算されます。
3人分のBMIが一度に計算され、新しい列になります。
ループを書かずに「全員分まとめて計算」できるのが、pandasの便利なところです。
3. apply — 各値に自分の処理を適用
「値に応じて分類したい」「複雑な変換をしたい」ときは apply(関数) を使います。
列の各値に対して、指定した関数を1つずつ適用してくれます。
lambda(その場で作る小さな関数)と組み合わせるのが定番です。
💡 lambda x: ... の読み方:
lambda x: "高い" if x >= 140 else "正常" は「x を受け取り、140以上なら『高い』、そうでなければ『正常』を返す」関数です。
apply はこの関数を、列の各値(各患者のSBP)に適用します。
条件分岐を伴う列の作成は、この apply + lambda が定番パターンです。
🩺 医療データ文脈:
検査値から「基準値内/要注意/異常」を判定する、年齢から「小児/成人/高齢者」を分類する——
こうした「数値を意味のあるカテゴリに変換する」処理は、医療データ分析で頻出です。
apply を使えば、自分のルールで自由に分類できます。
4. map・replace・astype — 値の置換と型変換
決まった対応関係で値を置き換えたいときは map や replace、
列の型を変えたいときは astype を使います。
map:辞書で値を一括変換
map(辞書) は「コード → 名称」のような決まった変換に便利です。
辞書のキーに一致する値を、対応する値に置き換えます。
(注意:対応表に無い値は NaN になります)
replace:特定の値だけ置き換える
replace(辞書) も値の置換ですが、対応表に無い値はそのまま残す点が map と違います。
「一部の表記ゆれだけ直したい」「特定の値だけ書き換えたい」ときは replace が安全です
(例:"HT"→"高血圧" だけ直し、すでに正しい "高血圧" はそのまま残す)。
astype:列の型を変換
CSVなどで数字が文字列として読み込まれた場合、astype(int) や astype(float) で
数値型に変換できます。逆に astype(str) で文字列にもできます。
💡 map と apply の違い:
map(辞書)… 決まった対応表で置き換える(コード→名称など)apply(関数)… 条件や計算を伴う柔軟な変換(140以上なら…など)
「単純な置き換えはmap、ロジックが必要ならapply」と覚えると使い分けやすいです。
5. 練習問題
計算で新しい列を作ろう
下記の df に、「脈圧」列(=SBP − DBP)を新しく追加して表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["田中", "佐藤", "鈴木"],
"SBP": [120, 145, 130],
"DBP": [80, 92, 85],
})
# 「脈圧」列(SBP - DBP)を追加して表示してください
df["脈圧"] = df["SBP"] - df["DBP"]
print(df) # 脈圧: 田中40, 佐藤53, 鈴木45
df["脈圧"] = df["SBP"] - df["DBP"] で、各行ごとに引き算した結果が新しい列になります。脈圧は 田中40・佐藤53・鈴木45 です。
applyで判定列を作ろう
下記の df に、BMIから判定する 「肥満度」列を apply で作ってください。
ルール:BMIが25以上なら「肥満」、そうでなければ「標準」。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["田中", "佐藤", "鈴木", "高橋"],
"BMI": [22.5, 28.1, 24.0, 30.5],
})
# BMI25以上なら「肥満」、そうでなければ「標準」の列を apply で作ってください
df["肥満度"] = df["BMI"].apply(lambda x: "肥満" if x >= 25 else "標準")
print(df)
# 肥満度: 田中=標準, 佐藤=肥満, 鈴木=標準, 高橋=肥満
apply(lambda x: "肥満" if x >= 25 else "標準") で、BMIの各値を判定して分類できます。佐藤(28.1)と高橋(30.5)が「肥満」、田中(22.5)と鈴木(24.0)が「標準」になります。
mapでコードを名称に変換しよう
下記の df の 性別コード(1=男性、2=女性)を、map で「性別」列に変換してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["田中", "佐藤", "鈴木", "高橋"],
"性別コード": [1, 2, 1, 2],
})
# 1=男性, 2=女性 に変換した「性別」列を map で作ってください
df["性別"] = df["性別コード"].map({1: "男性", 2: "女性"})
print(df)
# 性別: 田中=男性, 佐藤=女性, 鈴木=男性, 高橋=女性
map({1: "男性", 2: "女性"}) で、コードを対応する名称に一括変換できます。「コード→名称」のような決まった対応表での変換は、map が最適です。
6. まとめ
このレッスンのポイント
df["新列"] = 計算式で計算結果を新しい列にできる(行ごとに計算)apply(関数):各値に処理を適用。lambdaで条件分岐も書けるmap(辞書):対応表で値を置換(対応表に無い値はNaNになる)replace(辞書):指定した値だけ置換(対象外はそのまま残す)astype(型):列の型を変換(文字列の数字→数値 など)- 単純な置き換えは map / replace、ロジックが必要なら apply
自由に試してみましょう:
完了するとコース一覧に進捗が記録されます