68 votes

Python "TypeError: type non compressible: 'slice'" pour encoder des données catégoriques

Je reçois

TypeError: type inshashable: 'slice'

lors de l'exécution du code ci-dessous pour l'encodage de données catégoriques en Python. quelqu'un peut-il aider s'il vous plait?

 # 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])
 

102voto

piRSquared Points 159

X est un dataframe et ne peut être accédé via tranche de la terminologie comme X[:, 3]. Vous devez accéder via iloc ou X.values. Toutefois, la façon dont vous avez construit X fait une copie... donc. Je ne l'utiliserais 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])

8voto

Renu Points 121

utiliser des valeurs lors de la création de la variable X ou lors de l'encodage comme indiqué ci-dessus

 # 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
 

4voto

Gurbaksh Singh Points 91

Lors de la création de la matrice, X et Y utilisent le vecteur values .

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

Cela résoudra définitivement votre problème.

2voto

chandan p Points 21

si vous utilisez .Les valeurs lors de la création de la matrice X et Y des vecteurs qu'il va corriger le problème.

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

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

lorsque vous utilisez .Les valeurs qu'il crée un Objet de la représentation de la création de la matrice sera retourné avec les axes supprimé. Vérifier le lien ci-dessous pour plus d'informations

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

0voto

Sunitha G Points 44

Je recevais la même erreur (TypeError: type insaisissable: 'slice') avec le code ci-dessous:

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

Résolu avec le code ci-dessous en plaçant iloc après l'ensemble de données:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X