列の追加

データ処理の過程では、既存の列の値を使って新しい列を作りたいケースが多々あります。たとえば、次のようなケースです。

  • "身長(cm)"から、単位を変換した"身長(m)"を作りたい
  • "稼働人数""稼働期間"から、新しい"工数"(稼働人数 x 稼働期間)を作りたい
  • "総購入金額"の値によって、優良顧客か否かのフラグが格納された新しい"有料顧客フラグ"を作りたい

列の追加方法

前回のクエストで学んだように、 df[既存の列名] = 更新後の値とすることで既存の列の値を更新できます。

同様に、df[新しい列名] = 新しい列の値 とすると、新しい列が追加されます。新しい列の値 の部分は、固定の値か、Series型の値(DataFrameの1列分のデータ)が使えます。

たとえば固定の値の場合、df[新しい列名] = 1 のように代入することで、「全てのデータに1が格納された新しい列」が作成されます。

https://images.pyq.jp/repo/prod/pandas_start_02_addcol/add_col_1.jpg

pandasでは、既存の列の値を使った演算が可能です。
たとえば df["A"] + 10 のように書くと、「列Aの各データに10を足したSeries」が生成されます。+以外に、-*///%**など他の算術演算子も使えます。

固定の値同様、df[新しい列名] = Seriesとすることで列を追加できます。そのため、df[新しい列名] = df["A"] + 10のように書くと、「列Aの各データに10を足した結果」が新しい列として追加されます。

https://images.pyq.jp/repo/prod/pandas_start_02_addcol/add_col_2.jpg

また、df["A"] + df["B"] のように書くと、「列Aと列Bの各データを足し合わせたSeries」が生成されます。

https://images.pyq.jp/repo/prod/pandas_start_02_addcol/add_col_3.jpg
import pandas as pd

# データの読み込み
df = pd.read_csv("dataset/physical_measurement_clean.csv")
df
NameHeightWeightClub
0佐藤17253野球部
1田中16050合唱部
2鈴木16558美術部
3高橋17059美術部
4伊藤16654サッカー部
5山本15651所属なし
6渡辺16358所属なし

全てのデータに”1年A組”という文字列が格納された新しい列Classを作成しましょう。df[新しい列名] = 固定の値 とすると、全てのデータに指定した値が格納された新しい列が作成されます。

# 新しい列Classの作成(全て"1年A組")
df["Class"] = "1年A組"
df
NameHeightWeightClubClass
0佐藤17253野球部1年A組
1田中16050合唱部1年A組
2鈴木16558美術部1年A組
3高橋17059美術部1年A組
4伊藤16654サッカー部1年A組
5山本15651所属なし1年A組
6渡辺16358所属なし1年A組

df[]=と=でつなぐと新しい列ができる。

次に、列Heightの単位をcmからmに変換して、列HeightMを作成しましょう。df[“Height”] / 100と書くと、「各行の列Heightの値をそれぞれ100で割ったSeries」が得られます。

# 100で割って身長の単位をcmからmに変換
df["Height"] / 100
0    1.72
1    1.60
2    1.65
3    1.70
4    1.66
5    1.56
6    1.63
Name: Height, dtype: float64

計算した結果を、新しい列として追加しましょう。先ほどと同様、=を使って新しい列を作成できます。(=がないと新しい列が出来ない)

# 新しい列HeightMを作成
df["HeightM"] = df["Height"] / 100
df
NameHeightWeightClubClassHeightM
0佐藤17253野球部1年A組1.72
1田中16050合唱部1年A組1.60
2鈴木16558美術部1年A組1.65
3高橋17059美術部1年A組1.70
4伊藤16654サッカー部1年A組1.66
5山本15651所属なし1年A組1.56
6渡辺16358所属なし1年A組1.63

最後に、列BMIを追加しましょう。BMI(ボディー・マス・インデックス)とは肥満度を表す指数で、身長と体重から計算できます。

BMI = 体重kg ÷ (身長m × 身長m)

ここでは、列Weightと列HeightMの値を使って計算しましょう。

# 列の値を使ってBMIを計算
df["Weight"] / df["HeightM"] ** 2
0    17.915089
1    19.531250
2    21.303949
3    20.415225
4    19.596458
5    20.956607
6    21.829952
dtype: float64

Classや列HeightM同様、=を使って新しい列を追加します。

# 新しい列BMIを作成
df["BMI"] = df["Weight"] / df["HeightM"] ** 2
df
NameHeightWeightClubClassHeightMBMI
0佐藤17253野球部1年A組1.7217.915089
1田中16050合唱部1年A組1.6019.531250
2鈴木16558美術部1年A組1.6521.303949
3高橋17059美術部1年A組1.7020.415225
4伊藤16654サッカー部1年A組1.6619.596458
5山本15651所属なし1年A組1.5620.956607
6渡辺16358所属なし1年A組1.6321.829952

コメント

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