web-dev-qa-db-ja.com

Python "TypeError:unhashable type: 'slice'"カテゴリーデータのエンコード用

私は得ています

TypeError:ハッシュできないタイプ: 'slice'

pythonでカテゴリデータをエンコードするための以下のコードを実行するとき。誰でも助けてくれますか?

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('50_Startups.csv')
y=dataset.iloc[:, 4]
X=dataset.iloc[:, 0:4]

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])
53
kausik Chat

Xはデータフレームであり、X[:, 3]のようなスライス用語を介してアクセスすることはできません。 iloc または X.values 経由でアクセスする必要があります。ただし、Xを作成した方法により、コピーが作成されました...そうです。 valuesを使用します

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
# dataset = pd.read_csv('50_Startups.csv')

dataset = pd.DataFrame(np.random.Rand(10, 10))
y=dataset.iloc[:, 4]
X=dataset.iloc[:, 0:4]

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()

#  I changed this line
X.values[:, 3] = labelencoder_X.fit_transform(X.values[:, 3])
85
piRSquared

上記のように変数Xの作成中またはエンコード中に値を使用します

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
# dataset = pd.read_csv('50_Startups.csv')

dataset = pd.DataFrame(np.random.Rand(10, 10))
y=dataset.iloc[:, 4].values
X=dataset.iloc[:, 0:4].values
6
Renu

マトリックスXおよびYベクトルを作成するときは、valuesを使用します。

X=dataset.iloc[:,4].values
Y=dataset.iloc[:,0:4].values

それは間違いなくあなたの問題を解決します。

4
Gurbaksh Singh

行列XおよびYベクトルの作成中に.Valuesを使用すると、問題が修正されます。

y=dataset.iloc[:, 4].values

X=dataset.iloc[:, 0:4].values

.Valuesを使用すると、作成されたマトリックスのオブジェクト表現が作成され、軸が削除されて返されます。詳細については、以下のリンクを確認してください

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.values.html

2
chandan p

ラベルエンコーダーでX [:、3]をX.iloc [:、3]に変更してみてください

0
Anvesh

私は以下のコードで同じエラー(TypeError:ハッシュできないタイプ:「スライス」)を受け取っていました:

included_cols = [2,4,10]
dataset = dataset[:,included_cols]  #Columns 2,4 and 10 are included.

データセットの後にilocを配置することにより、以下のコードで解決されました。

included_cols = [2,4,10]
dataset = dataset.iloc[:,included_cols]  #Columns 2,4 and 10 are included.
0
Sunitha G