web-dev-qa-db-fra.com

Python "TypeError: type non nécessaire: 'slice'" pour l'encodage de 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])
53
kausik Chat

X est un cadre de données auquel il est impossible d'accéder via une terminologie de tranche telle que _X[:, 3]_. Vous devez accéder via iloc ou X.values . Cependant, la façon dont vous avez construit X en a fait une copie ... donc. J'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])
_
85
piRSquared

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
6
Renu

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

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

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

4
Gurbaksh Singh

si vous utilisez .Values ​​lors de la création des vecteurs matrices X et Y, le problème sera résolu.

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

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

lorsque vous utilisez .Values, il crée une représentation Object de la matrice créée qui sera renvoyée avec les axes supprimés. Consultez le lien ci-dessous pour plus d'informations

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

2
chandan p

Essayez en remplaçant X [:, 3] par X.iloc [:, 3] dans l'encodeur de libellé.

0
Anvesh

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.
0
Sunitha G