IndexError: Index dimension must be 1 or 2
エラーが発生した理由は、LabelEncoderの適用後にX_train[col]がDataFrameの列ではなく、行列になってしまったためです。修正するために、fit_transform()の戻り値が1次元のNumpy配列になるようにします。
修正したコードは以下のようになります:
python
# LabelEncoder を使用して各列をエンコードする
label_encoders = {}
for col in categorical_cols:
label_encoders[col] = LabelEncoder()
X_train[col] = label_encoders[col].fit_transform(X_train[col])
# OneHotEncoder を作成し、選択した列を変換する
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
X_train_encoded = encoder.fit_transform(X_train)
# エンコードされた特徴量を元のデータフレームに追加する
X_train_encoded_df = pd.DataFrame(X_train_encoded, columns=encoder.get_feature_names_out(categorical_cols))
# 元のデータフレームからカテゴリカル変数の列を削除する
X_train = X_train.drop(columns=categorical_cols)
# エンコードされた特徴量を元のデータフレームに結合する
X_train = pd.concat([X_train, X_train_encoded_df], axis=1)
これにより、LabelEncoderとOneHotEncoderが正常に適用され、DataFrameの各列が適切にエンコードされます。

ディスカッション
コメント一覧
まだ、コメントがありません