機械学習:前処理 補遺:df.iloc[]
機械学習のアルゴリズムに、データフレームの行番号と列番号で指定してそこだけ渡せたら便利な場面があります。
np.arrayならば、直接的で、
前記事のastype()で使ったデータフレームで、OneHotEncodingを行なったデータタイプはnp.arrayなので、これを使うと、
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
X=df[['Size','Color','Price','Inventory']].values
color_ohe=OneHotEncoder(drop='first')
c_transf=ColumnTransformer(
[('onehot',color_ohe,[1]),
('nothing','passthrough',[0,2,3])])
Encode_X=c_transf.fit_transform(X)
Encode_X
この最初の5列は、OneHotEncodingされた色です。
なのでこれだけ取り出したい時には、
Encode_X[:,0:4]
とします。カンマの前が:となっていますが、これはすべての行の指定で、カンマの後の0:4は、0列から4列までの指定です。
これを最後の3列のみ取り出したい場合は、
Encode_X[:,5:]
です。
では、一方でデータフレームの場合は、これは使えません。そして、sklearnが提供しているアルゴリズムは、データフレームが基本です。
データフレームで行番号、列番号を指定したい場合は、ilocを使います。
# テストデータ
import pandas as pd
df = pd.DataFrame({
'Size':['S', 'M', 'L', 'S', 'M', 'P', 'M', 'L', 'XP', '2XL', 'XL'],
'Color':['green','red','yellow','yellow','blue',
'black','white','red','yellow','green','red'],
'Price':[20,40,10,15,60,15,50,35,20,55,100],
'Inventory':['2','4', '5', '6', '0', '11', '2', '5', '6', '9', '10']
})
df
このデータフレームの最初の3列全ての行を取り出したい場合は、
df.iloc[:,:3]
最後の4列の全ての行を取り出したい場合は、
df.iloc[:,3]
ここで、pythonの行番号、列番号はゼロから始まることに注意してください。