蜘蛛 Python "object arrays are currently not supported"

Spyder Python "object arrays are currently not supported"

我在 Anaconda Spyder (Python) 中遇到问题。

变量资源管理器中Windows10下看不到对象类型数组。如果我点击 X 或 Y,我会看到一个错误:

object arrays are currently not supported.

我有 Win 10 Home 64bit (i7-4710HQ) 和 Python 3.5.2 | Anaconda 4.2.0(64 位)[MSC v.1900 64 位 (AMD64)]

我已经分析了代码,直到 point 对您来说可能会失败。

Spyder 的数组编辑器似乎不支持显示混合类型的数组(对象数组)。

在这里你可以看到 supported formats.

我第一次使用它时有些困惑:单击数据集时收到的编辑器与单击数组变量时收到的是同一个编辑器。

对于 array 类型的变量,您会收到一个 ArrayEditor 小部件。我认为调用已完成 here.

但是对于 DataFrame 类型的变量,您会收到一个 DataFrameEditor。我认为调用已完成 here

问题在于两个小部件看起来或多或少相同,因此人们倾向于认为在两种情况下会收到相同的结果,但是 DataFrameEditor 允许混合类型并且ArrayEditor 不是。

您可以尝试在 IPython 控制台中检查数组变量,直到最终在 Spyder 中发布对适当小部件的支持。

这是因为数组有多种数据类型,所以它不能显示具有多种数据类型的对象,因为它不能 select 单一类型..但是如果它只有一种数据类型,类型是 'float64' 所以可以看到。

只要您的变量类型不同,并且在变量资源管理器中您将其视为对象,就意味着您需要将变量转换为相同的类型。 您可以使用 fit_transform():

修复它

这是该教程中的相关代码部分:

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()

这是因为数据没有编码。所有分类数据应为 "encoded"。 查看您的 sypder(https://i.stack.imgur.com/uApwt.jpg) 的变量资源管理器中的数据后,很明显 X 包含关于某个国家的数据(如 [France, 44.0, 72000]),因此国家名称应该被编码,类似地 y包含"Yes"或"No",所以也应该编码为

在第21行后添加如下代码,即可看到对象数组

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

我遇到了同样的问题。问题是行

oneHotEncoder.fit_transform(X).toarray()

这不会将数据分配回 X 数组。相反,以下行应该可以解决问题:

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

(Spyder 开发人员在这里) Spyder 4 中将添加对对象数组的支持,将于 2019 年发布。

使用更新版本的 spyder,您无法再使用变量资源管理器查看混合数组。您可以在控制台中打印数组以检查它。

你可以做两件事来绕过 Spyder 中的变量查看器。您可以

A) 使用"print (X)"揭示X的内容,或者

B) 简单地使用 IPython 控制台,只需键入 X 并点击 return。这也让您可以快速了解所讨论的 ML 函数是否正在发挥作用。

我遇到了类似的问题,因为我坚持对 y 变量使用与 x 完全相同的格式,即 x[: , 0] = labelencoder_x.fit_transform(x[:,0]), 我用过 y[:] = labelencoder_y.fit_transform(y[:]) *(taking into account the syntax for the fit transform for y)*

上面为 y_testy_train "object" 制作了数据类型,在 Spyder 上无法在变量资源管理器中查看。

当我使用讲师使用的确切行时: y = labelencoder_y.fit_transform(y)。 dtype 更改为 int64 可以在变量资源管理器中查看。

这里有一个很好的例子

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)

您可以在数据框中查看数据,这会将数组转换为数据框。

并且变量 explorer 接受数据帧。以上是正确的和检查过的代码

这对我有用:

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())

Spyder 尚不支持它,但您可以使用 IPyhon 控制台通过直接向其输入变量名来打印这些值。

Solution: Downgrade the version of spyder to 3.2.0

您可以前往 anaconda-navigator。

如果您正在学习 Udemy 机器学习课程,则可能是讲师使用的是旧版本的 spyder,并且它正在为他工作。在 3.2.8 等较新的版本中,它不起作用,但可以合并到未来的版本中。

编辑:这个答案现在不适用,因为从其他答案中我们可以看到这个功能已经在> = 4版本的spyder中添加了。

使用以下代码:

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

添加

X = pd.DataFrame(X)

将 X 对象转换为可以在 spyder 中检查也没有错误的数据帧。

对我有用!

我用的一样,没有 dataFrame.values
它对我有用。

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

如果数据是相同类型的,例如int或float,它将显示在变量资源管理器中,否则不支持例如string和int。

但是有检查数据的解决方案,你可以在IPython控制台中进行。

我实际上已经完成了这门课程,并且讲师从未在变量查看器中打开对象。我回去检查,他确实尝试过,并且遇到了与您完全相同的问题。查看数据集时,他在控制台中查看,而不是在变量查看器中查看。

如上所述,您可以将整个内容转换为数据框,然后您可以在变量查看器中打开该数据框:

dataset = pd.read_csv("data.csv")
dataframe = pd.DataFrame(dataset)

您现在应该可以随心所欲地在变量查看器中查看数据以及分类变量。 当时我只是通过输入导入数据的名称在控制台中自己查看数据集,但这在最新版本的 Spyder 上仍然是一种可行的方法。