pandasデータフレームには行と列があります。各列にはヘッダーがあります。パンダでデータ操作操作を続ける限り、変数ヘッダーは保持されます。 Sci-kit-learn libのデータ前処理機能を試してみると、ヘッダーがすべて失われ、フレームは数字のマトリックスに変換されます。
Scikit-learnが出力としてnumpy ndarrayを与えるので、なぜそれが起こるのか理解しています。そして、numpy ndarrayは単なる行列であり、列名はありません。
しかし、ここにあります。データセットに何らかのモデルを構築している場合、初期データの前処理とモデルの試行の後でも、より適切な他のモデルを実行するには、さらにデータ操作タスクを実行する必要があります。特定の変数のインデックスがわからない場合があるため、列ヘッダーにアクセスできないとデータ操作が困難になりますが、変数名を覚えたり、df.columnsを実行することで検索することも簡単です。
それを克服する方法は?
EDIT1:サンプルデータのスナップショットを使用した編集。
Pclass Sex Age SibSp Parch Fare Embarked
0 3 0 22 1 0 7.2500 1
1 1 1 38 1 0 71.2833 2
2 3 1 26 0 0 7.9250 1
3 1 1 35 1 0 53.1000 1
4 3 0 35 0 0 8.0500 1
5 3 0 NaN 0 0 8.4583 3
6 1 0 54 0 0 51.8625 1
7 3 0 2 3 1 21.0750 1
8 3 1 27 0 2 11.1333 1
9 2 1 14 1 0 30.0708 2
10 3 1 4 1 1 16.7000 1
11 1 1 58 0 0 26.5500 1
12 3 0 20 0 0 8.0500 1
13 3 0 39 1 5 31.2750 1
14 3 1 14 0 0 7.8542 1
15 2 1 55 0 0 16.0000 1
上記は基本的にpandasデータフレームです。このデータフレームでこれを行うと、列ヘッダーが削除されます。
from sklearn import preprocessing
X_imputed=preprocessing.Imputer().fit_transform(X_train)
X_imputed
新しいデータはnumpy配列であるため、列名は削除されます。
array([[ 3. , 0. , 22. , ..., 0. ,
7.25 , 1. ],
[ 1. , 1. , 38. , ..., 0. ,
71.2833 , 2. ],
[ 3. , 1. , 26. , ..., 0. ,
7.925 , 1. ],
...,
[ 3. , 1. , 29.69911765, ..., 2. ,
23.45 , 1. ],
[ 1. , 0. , 26. , ..., 0. ,
30. , 2. ],
[ 3. , 0. , 32. , ..., 0. ,
7.75 , 3. ]])
したがって、pandasデータフレームでデータ操作を行うときに列名を保持したいと思います。
ほとんどの場合、scikit-learnは実際に列ヘッダーを削除するため、後で追加し直します。あなたの例では、X_imputed
としてsklearn.preprocessing
出力およびX_train
元のデータフレームとして、次を使用して列ヘッダーを戻すことができます。
X_imputed_df = pd.DataFrame(X_imputed, columns = X_train.columns)
AMI Tavory's reply here によると、ドキュメントごとに、Imputerは空の列または行を省略します(ただし、実行します)。
したがって、Imputerを実行し、説明されているように列名を設定する前に 上記 、次のように実行します(列の場合):
X_train=X_train.dropna(axis=1, how='all')