IndexError: Index dimension must be 1 or 2

2024年6月17日

エラーが発生した理由は、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)

これにより、LabelEncoderOneHotEncoderが正常に適用され、DataFrameの各列が適切にエンコードされます。

未分類

Posted by ぼっち