Python – pandas列columnをdelete
今回は、機械学習のmodelingやEDA(Exploratory Data Analysis)などで頻繁に使用する、pandas columnsのdeleteについて触れていこうと思います。特にshallow learningのmodeling前処理でtraining datasetからtarget columnをdeleteするときに毎回使用しているのではないかと思います。
1. データ準備
データ準備として、今回はsklearn.datasetsのcalifornia_housingを使用していきます。このデータは回帰用のSampleデータとして使用できますので、必要に応じて使用してみてください。また、pandas.dataframeを使用するので、pandasもimportし、sklearn.datasetsのcalifornia_housingのデータを変数に格納します。
In [1]: import pandas as pd
...: from sklearn.datasets import fetch_california_housing
In [2]: california_housing = fetch_california_housing()
california_housingのデータをpandas.dataframeに変換し、target column「MudHouseVal」をdataframeに追加してデータ準備完了です。
In [3]: df = pd.DataFrame(california_housing.data, columns=california_housing.feature_names)
In [4]: df['MedHouseVal'] = pd.Series(california_housing.target)
...: df.head()
Out[4]:
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude MedHouseVal
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 4.526
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 3.585
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3.521
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 3.413
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 3.422
2. pandas.dataframeの列columnをdelete – 1
さて、今回はbase dataaframe「df」からtarget columnを「MedHouseVal」として、このcolumnを削除してfeature datasetを作成してみようと思います。オーソドックスは方法はこんな感じではないかと思います。axisについて0
: rows, 1
: columnsです。
In [5]: X = df.drop('MedHouseVal', axis=1)
...: X.head()
Out[5]:
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25
仕上げとしてtarget変数も作成してみます。y[:5]のnumpyスライスについては、以下で詳しく記載していますので、ご参照ください。
Python – NumPy配列スライス、形状変更(reshape, newaxis)、連結分割(concatenate, split)
In [6]: y = df['MedHouseVal']
...: y[:5]
Out[6]:
0 4.526
1 3.585
2 3.521
3 3.413
4 3.422
Name: MedHouseVal, dtype: float64
3. pandas.dataframeの列columnをdelete – 2
ここでは、個人的に最近よく使用している、modelingの前処理でfeature datasetとtarget data作成について記載してみようと思います。pandas.DataFrame.popを使用した方法です。
まず、target dataの変数y_1を作成します。
In [7]: y_1 = df.pop('MedHouseVal')
...: y_1[:5]
Out[7]:
0 4.526
1 3.585
2 3.521
3 3.413
4 3.422
Name: MedHouseVal, dtype: float64
次にfeature dataset X_1を作成していきます。
In [8]: X_1 = df
...: X_1.head()
Out[8]:
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25
popを使用するだけで、baseとなるdfから「MedHouseVal」が削除されていると思います。少しだけシンプルにコードを書くことができるので、個人的にはよく使用しています。
4. pandas.dataframeの複数列columnをdelete
pandas.dataframeから複数columnをdeleteしてみます。この場合、第1引数(colmuns)にリスト形式で指定するだけで複数のcolumnをdeleteすることができます。
In [9]: X_2 = df.drop(['MedHouseVal', 'Longitude'], axis=1)
...: X_2.head()
Out[9]:
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85
まとめ
ということで今回は、Python – pandas列columnをdeleteについて記載してみました。他にも実装方法はあると思いますが、今回は実案件での使用頻度の高い書き方について記載してみました。