Spyder Python:“目前不支持对象数组”

36

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

变量浏览器下,Windows 10不能查看对象类型数组。如果我点击 X或Y,就会看到一个错误:

目前不支持对象数组。

我的系统环境是Win 10 Home 64位(i7-4710HQ),Python版本为3.5.2 | Anaconda 4.2.0 (64位) [MSC v.1900 64 bit (AMD64)]。

截屏


10
这不是Anaconda或Windows的问题。Spyder编辑器在变量资源管理器中并不支持所有数据类型。实际上,在幕后,Pandas使用的是NumPy数组,而Spyder仅支持数值类型的数据类型。这并不意味着您不能使用它们,只是您不能使用变量资源管理器查看它们。 - Aaron
3
非常感谢您的回答。在udemy.com上的Python课程 - 机器学习 A-Z™中,我注意到其他使用MAC电脑和Spyder的人可以做到这一点。导师认为这可能与Win 10有关。我感到困惑:( - Honza
1
我有同样的问题,我正在使用Windows 7(我正在Udemy上学习相同的课程)...我认为这与Spyder的当前版本有关。 - Chaim Salzer
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - yucer
我是指一个Dataframe变量。 - yucer
显示剩余3条评论
18个回答

26
一个很好的例子在这里。
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)

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

变量浏览器接受dataframe。上述是正确的并经过检查的代码。


这个功能是从哪个版本开始添加的?它在Spyder 3.3(Ubuntu 18.04 LTS)上无法工作。 - ashish malgawa
嗨@ashishmalgawa,这不是一个功能添加。答案与您使用的操作系统无关。以上只是一种在数据框中查看它的方法。即,如果您想在变量资源管理器中查看它。代码对我来说运行良好。 - Aviator
但是对于Udemy课程的追随者来说,导师实际上已经为此提供了支持,而无需通过额外的计算来操作变量。请尝试访问https://dev59.com/7lgR5IYBdhLWcg3wT7tL#49347986。 - kaushalpranav

25

(Spyder开发人员在此) 支持对象数组将在 Spyder 4 中添加,该版本将于2019年发布。


2
但是对于Udemy课程的追随者,导师实际上为此提供了支持。请尝试访问https://dev59.com/7lgR5IYBdhLWcg3wT7tL#49347986 - kaushalpranav
2
我们有路线图吗?现在是2019年。 - Srinath Ganesh
2
Spyder 4 很可能会在2019年9月发布。 - Carlos Cordoba
确认:使用Spyder4,您可以查看对象数组。 - madhairsilence
@MohammedNoureldin conda安装spyder=4.0.1 - madhairsilence
显示剩余2条评论

16

我不使用dataFrame.values也可以得到相同的结果。
这对我起作用了。

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

在我的情况下很有帮助。 - TapanHP

10
解决方案:将spyder的版本降级到3.2.0。 您可以通过进入anaconda-navigator来实现此操作。 如果您正在跟随机器学习的Udemy课程,那么讲师可能正在使用旧版本的spyder并且它正常工作。在更新的版本(如3.2.8)中可能无法正常工作,但在未来的版本中可能会被纳入。 编辑:此答案现已不适用,因为从其他答案中我们可以看到该功能已经在spyder的版本大于等于4中添加了。

3
如果您正在跟随Udemy课程,需要找到Spider 3.2.8版本的确切解决方案。 - Boltyk

6
我已经分析了代码,直到可能导致问题的

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

在这里,您可以查看支持的格式

第一次使用时有些令人困惑的是:单击数据集和单击数组变量时都会收到相同的编辑器。

对于类型为array的变量,您将收到一个ArrayEditor小部件。我认为调用是在这里进行的。

但是对于类型为DataFrame的变量,您将收到一个DataFrameEditor。我认为调用是在这里进行的。

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

在适当的小部件中支持发布之前,您可以尝试在IPython控制台中检查数组变量。


请注意,我的参考是针对您提出问题时的代码标准。问题已更新以反映另一个堆栈跟踪,但问题可能仍然存在。 - yucer
但对于 Udemy 课程的追随者,导师实际上是有支持的。请尝试访问此链接:https://dev59.com/7lgR5IYBdhLWcg3wT7tL#49347986 - kaushalpranav

5

请使用以下代码:

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

2
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您提出代码建议的原因。请尽量不要在代码中添加过多的解释性注释,这会降低代码和解释的可读性! - Filnor

4
这是因为数组具有多种数据类型,因此无法显示具有多种数据类型的对象,因为它无法选择单个类型。但如果只有一种数据类型,则该类型为'float64',则可以看到它。

4
只要您的变量类型不同,在变量资源管理器中将其显示为对象,这意味着需要将变量转换为相同类型。在您的情况下,您可以通过使用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()

3
有两种方法可以绕过Spyder中的变量查看器。你可以:
A)使用“print(X)”来显示X的内容,或者
B)简单地使用IPython控制台,只需输入X并按回车即可。这也可以让你快速揭示所讨论的机器学习函数是否正常工作。

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - ykaragol
4
问题由原帖评论更好地定义。问题是Spyder GUI。在一个机器语言课程中,缺乏Python经验的新手被要求使用GUI来审查ML函数。我的帖子为这些新手提供了一种前进并专注于由教师提供的材料的方式。 - Joe Almeida

3

Spyder目前还不支持此功能,但您可以使用IPython控制台通过直接输入变量名称来打印这些值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接