web-dev-qa-db-ger.com

Python "TypeError: unhashable type: 'slice'" zum Codieren kategorialer Daten

Ich bekomme

TypeError: unhashable type: 'slice'

wenn Sie den folgenden Code zum Codieren kategorialer Daten in Python ausführen. Kann jemand bitte helfen?

# 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 ist ein Datenframe und kann nicht über Slice-Terminologie wie X[:, 3] aufgerufen werden. Sie müssen über iloc oder X.values zugreifen. Die Art und Weise, wie Sie X konstruiert haben, hat es jedoch zu einer Kopie gemacht ... also. Ich würde values verwenden

# 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

verwenden Sie Werte entweder beim Erstellen der Variablen X oder beim Codieren, wie oben erwähnt

# 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

Verwenden Sie beim Erstellen der Matrix X und Y vector values.

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

Es wird definitiv Ihr Problem lösen.

4
Gurbaksh Singh

wenn Sie beim Erstellen der Matrix-X- und -Y-Vektoren .Values ​​verwenden, wird das Problem behoben.

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

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

wenn Sie .Values ​​verwenden, wird eine Objektdarstellung der erstellten Matrix mit entfernten Achsen zurückgegeben. Überprüfen Sie den folgenden Link für weitere Informationen

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

2
chandan p

Versuchen Sie es, indem Sie X [:, 3] in X.iloc [:, 3] im Label-Encoder ändern

0
Anvesh

Ich habe den gleichen Fehler (TypeError: unhashable type: 'slice') mit folgendem Code erhalten:

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

Mit dem folgenden Code behoben, indem iloc nach dem Datensatz eingefügt wird:

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