TypeError: sparse matrix length is ambiguous; use getnnz() or shape[0]

2024年6月17日

pd.get_dummies() のエラーは、入力データがスパース行列であるために発生しています。pd.get_dummies() は、入力データがデータフレームであることを想定していますが、ここではスパース行列を受け取っています。

このエラーを解決するためには、スパース行列ではなくデータフレームを入力として pd.get_dummies() を使用する必要があります。スパース行列をデータフレームに変換してから pd.get_dummies() を適用することで、エラーを回避できます。

以下は修正されたコードです:

python
# 特徴量エンジニアリング(カテゴリ変数エンコーディング)
from sklearn.preprocessing import LabelEncoder
import pandas as pd

# カテゴリカル変数の列を選択する
categorical_cols = ['original_product_code', 'product_name', 'product_maker_number']

# データフレームをスパース行列に変換せずにカテゴリカル変数をダミー変数に変換する
X_train_encoded = pd.get_dummies(X_train[categorical_cols], columns=categorical_cols)

# 元のデータフレームからカテゴリカル変数の列を削除する
X_train = X_train.drop(columns=categorical_cols)

# エンコードされた特徴量を元のデータフレームに結合する
X_train = pd.concat([X_train, X_train_encoded], axis=1)

print(X_train)

この修正を加えることで、エラーを解決し、カテゴリカル変数を正常にダミー変数にエンコードできるはずです。

未分類

Posted by ぼっち