import pandas as pd
X = pd.read_csv("../data/sample.csv")
X.head()
元号 | 和暦 | 西暦 | 人口総数 | 町名 | |
---|---|---|---|---|---|
0 | 大正 | 9.0 | 1920.0 | 394748 | A町 |
1 | 大正 | 9.0 | 1920.0 | 31421 | B町 |
2 | 大正 | 9.0 | 1920.0 | 226993 | C町 |
3 | 大正 | 9.0 | 1920.0 | 253689 | D町 |
4 | 大正 | 9.0 | 1920.0 | 288602 | E町 |
sklearn.compose.make_column_transformerを使用します。指定した複数列に対して、一括で前処理方法を指定します。
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.compose import make_column_transformer
c_oh = OneHotEncoder()
n_ss = StandardScaler()
ct = make_column_transformer(
(c_oh, ["元号", "町名"]), # カテゴリ変数にonehot
(n_ss, ["西暦", "人口総数"]), # 数値列をスケーリング
remainder="passthrough", # 指定の無い列はそのまま
sparse_threshold=0,
)
X_transform = ct.fit_transform(X)
# 変換後のテーブル
pd.DataFrame(X_transform).head()
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -1.665466 | 2.046908 | 9.0 |
1 | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -1.665466 | -0.557977 | 9.0 |
2 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -1.665466 | 0.844183 | 9.0 |
3 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -1.665466 | 1.035581 | 9.0 |
4 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | -1.665466 | 1.285891 | 9.0 |
5 rows × 32 columns