Spyder Python “las matrices de objetos actualmente no son compatibles”

Tengo un problema en Anaconda Spyder (Python).

La matriz de tipo de objeto no se puede ver en Windows 10 en el explorador de variables . Si hago clic en X o Y , veo un error:

arrays de objetos actualmente no son compatibles.

Tengo Win 10 Home 64bit (i7-4710HQ) y Python 3.5.2 | Anaconda 4.2.0 (64 bits) [MSC v.1900 64 bits (AMD64)]

Captura de pantalla

Related of "Spyder Python “las matrices de objetos actualmente no son compatibles”"

Un buen ejemplo está aquí.

import numpy as np import pandas as pd import matplotlib.pyplot as plt dataset = pd.read_csv('Salary_Data.csv') in your case right name of your file X=dataset.iloc[:,:-1].values this will convert dataframe to object df = pd.DataFrame(X) 

Puede ver los datos en el dataframe, lo que convierte arrray a dataframe.

Y la variable explorer acepta el dataframe. El código anterior es correcto y comprobado.

( Desarrollador Spyder aquí ) El soporte para matrices de objetos se agregará en Spyder 4 , que se lanzará en 2019.

Utilicé lo mismo sin dataFrame y .values .
Funciono para mi

 x = dataset.iloc[:, :-1] y = dataset.iloc[:,3] 

Solución: bajar la versión de spyder a 3.2.0

Puedes hacer esto yendo a anaconda-navigator.

Si está siguiendo el Curso Udemy sobre Aprendizaje Automático, probablemente el instructor esté usando una versión anterior de spyder y está funcionando para él. En las versiones más nuevas, como 3.2.8, no funciona, pero se puede incorporar en las próximas versiones en el futuro.

He analizado el código hasta el punto que podría estar fallando.

Parece que el editor de arrays de Spyder no admite mostrar arrays de tipos mixtos (arrays de objetos).

Aquí puedes ver los formatos soportados .

Algo fue confuso para mí la primera vez que lo usé: recibes el mismo editor al hacer clic en un Conjunto de datos que cuando haces clic en una variable de matriz.

En el caso de una variable de tipo array , recibirá un widget ArrayEditor . Creo que esa llamada se hace aquí .

Pero en el caso de una variable de tipo DataFrame , recibe un DataFrameEditor . Creo que esa llamada se hace aquí.

El problema es que ambos widgets parecen más o menos iguales, por lo que uno tiende a pensar que recibe el mismo resultado en ambos casos, pero el DataFrameEditor permite tipos mixtos y ArrayEditor no.

Puede intentar inspeccionar las variables de la matriz en la consola de IPython hasta que finalmente se publique el soporte en Spyder para los Widgets adecuados.

Esto se debe a que la matriz tiene más de un tipo de datos, por lo que no puede mostrar un objeto con más de un tipo de datos porque no puede seleccionar un solo tipo. Pero si tiene un solo tipo de datos, el tipo es ‘float64’, por lo que se puede ver.

Siempre que su tipo de variables no sea el mismo y en el explorador de variables vea esto como un objeto, significa que la variable debe convertirse al mismo tipo en su caso. Puedes arreglarlo usando fit_transform ():

Aquí se relaciona parte del código en ese tutorial:

 from sklearn.preprocessing import LabelEncoder , OneHotEncoder labelencoder_X_1 = LabelEncoder() X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1]) labelencoder_X_2 = LabelEncoder() X[:, 2] = labelencoder_X_1.fit_transform(X[:, 2]) onehotencoder = OneHotEncoder(categorical_features = [1]) X = onehotencoder.fit_transform(X).toarray() 

Hay dos cosas que puede hacer para omitir el visor de variables en Spyder. Tu también puedes

A) use “imprimir (X)” para revelar el contenido de X, o

B) Simplemente use la consola IPython simplemente escribiendo X y presione regresar. Eso también le permite revelar rápidamente si las funciones ML discutidas están haciendo su trabajo.

Usa el siguiente código:

 dataset = pd.read_csv('Data.csv') X = pd.DataFrame(dataset.iloc[:, :-1].values) 

Con la versión actualizada de spyder, ya no puede ver matrices mixtas utilizando el explorador de variables. Puede imprimir la matriz en su lugar en la consola para inspeccionarla.

Spyder aún no lo admite, pero puede usar la Consola IPyhon para imprimir esos valores escribiendo directamente el nombre de la variable.

Tuve un problema similar, porque insistí en usar el formato exacto para la variable y como para x , es decir, x[: , 0] = labelencoder_x.fit_transform(x[:,0]) , y utilicé y[:] = labelencoder_y.fit_transform(y[:]) *(taking into account the syntax for the fit transform for y)*

Lo anterior hizo el dtype para y_test y y_train “objeto” que no se puede ver en Spyder en el explorador de variables.

Cuando usé la línea exacta utilizada por el instructor: y = labelencoder_y.fit_transform(y) . El dtype cambió a int64 que se puede ver en la variable explorer.

Esto funcionó para mí:

 import pandas as pd labels = pd.read_csv('labels/labels.csv') # object arrays are currently not supported exception breeds = labels.breed.unique() # Supported Version # working fine breeds = pd.DataFrame(labels.breed.unique()) 

Añadir

X = pd.DataFrame (X)

para convertir el objeto X en un dataframe que puede verificarse en el spyder también sin el error.

¡Trabajó para mi!

Esto se debe a que los datos no están codificados. Todos los datos categóricos deben estar “codificados”. Después de mirar los datos en el explorador de variables de su sypder ( http://sofes.miximages.com/python/uApwt.jpg ), está claro que X contiene datos sobre algún país (como [Francia, 44.0, 72000]), por lo que el nombre del país debe estar codificado y, de manera similar, y contiene “Sí” o “No”, por lo que también debe estar codificado

Agregue el siguiente código después de la línea 21, podrá ver la matriz de objetos

 # Encoding categorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder ''' To prevent the machine learning equations from thinking (if there are more than one country) that one country is greater than another, use the concept of dummy variables ''' labelencoder_X = LabelEncoder() X[:, 0] = labelencoder_X.fit_transform(X[:, 0]) onehotencoder = OneHotEncoder(categorical_features = [0]) X = onehotencoder.fit_transform(X).toarray() ''' Since y is dependent variable, the machine learning model will know that its a category, so we are going to use only the LableEncoder() ''' labelencoder_y = LabelEncoder() y = labelencoder_y.fit_transform(y) 

Yo tuve el mismo problema. El problema era la línea

 oneHotEncoder.fit_transform(X).toarray() 

Lo que no vuelve a asignar los datos a la matriz X. En su lugar, la siguiente línea debería solucionar el problema:

 X=oneHotEncoder.fit_transform(X).toarray() 

Si los datos son del mismo tipo de ejemplo int o float, se mostrarán en el explorador de variables, de lo contrario no se admitirá si los datos tienen cadena e int, por ejemplo.

Pero hay una solución para verificar los datos, puede hacerlo en la Consola IPython.