Python – pandas列columnをdelete

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について記載してみました。他にも実装方法はあると思いますが、今回は実案件での使用頻度の高い書き方について記載してみました。

(Visited 66 times, 1 visits today)