【问题标题】:Spyder Python "object arrays are currently not supported"Spyder Python“当前不支持对象数组”
【发布时间】:2017-05-20 13:07:14
【问题描述】:

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

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

目前不支持对象数组。

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

【问题讨论】:

  • 这不是 anaconda 或 windows 的问题。spyder 编辑器根本不支持变量资源管理器中的所有数据类型。只有当数据类型是数字类型时,pandas 才会使用 spyder 支持的 numpy 数组。这并不意味着你不能使用它们,只是你不能用变量资源管理器查看它们
  • 该错误消息有什么不清楚的地方?
  • 非常感谢您的回答。在 udemy.com - Machine Learning A-Z ™ 上的 python 课程中,我注意到 Spyder 中的其他人(在 MAC 下)可以做到这一点。导师觉得应该和Win 10有关。我很困惑:(
  • 我有同样的问题,我在 Windows 7 上(我在 udemy 上同样的课程).. 我认为这与当前版本的 spyder 有关
  • 我也有同样的问题。我确信它一直有效到上周。我所做的唯一更改是允许软件发送匿名使用数据,但我认为这不相关。

标签: python anaconda spyder


【解决方案1】:

这里有一个很好的例子

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 。

变量资源管理器接受数据框。以上是正确且经过检查的代码

【讨论】:

  • 这个功能是从哪个版本添加的?它不适用于 spyder 3.3 (Ubuntu 18.04 LTS)
  • 嗨@ashishmalgawa,这不是功能添加。答案与您使用的操作系统无关。以上只是在数据框中查看它的一种方法。即如果您想在变量资源管理器中查看它。并且代码对我来说很好
  • 但是对于udemy课程的追随者,导师实际上已经支持它,而无需通过额外的计算来操纵变量。试试这个stackoverflow.com/a/49347986/4010017
【解决方案2】:

此处为 Spyder 开发者)Spyder 4 中将添加对对象数组的支持,将于 2019 年发布。

【讨论】:

  • 但是对于udemy课程的追随者,导师其实是有支持的。试试这个stackoverflow.com/a/49347986/4010017
  • 我们有路线图吗?我们现在是 2019 年
  • Spyder 4 将于 2019 年 9 月(最有可能)发布。
  • 确认:使用 spyder4 你可以看到对象数组
  • @madhairsilence,你是如何安装 Spyder4 的?我无法从 Anaconda 3 安装它。
【解决方案3】:

我在没有dataFrame.values 的情况下使用相同的方法。
它对我有用。

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

【讨论】:

  • 对我有帮助
【解决方案4】:

解决方法:将spyder的版本降级到3.2.0

您可以通过转到 anaconda-navigator 来执行此操作。

如果您正在学习关于机器学习的 Udemy 课程,那么讲师可能正在使用旧版本的 spyder,并且它正在为他工作。在 3.2.8 等较新版本中,它无法正常工作,但可以合并到未来的版本中。

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

【讨论】:

  • 如果您正在关注 Udemy 课程,3.2.8 版 Spider 的确切解决方案
【解决方案5】:

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

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

在这里你可以看到supported formats

当我第一次使用它时,有些东西让我感到困惑:当你点击一个数据集时,当你点击一个数组变量时,你会收到相同的编辑器。

如果是 array 类型的变量,您会收到一个 ArrayEditor 小部件。我认为那个电话是here

但是对于 DataFrame 类型的变量,您会收到一个 DataFrameEditor。我认为那个电话是here

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

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

【讨论】:

  • 请注意,我对代码的引用是在您提出问题的那一刻。问题已更新,反映了另一个堆栈跟踪,但问题可能相同。
  • 但是对于udemy课程的追随者,导师其实是有支持的。试试这个stackoverflow.com/a/49347986/4010017
【解决方案6】:

使用以下代码:

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

【讨论】:

  • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
【解决方案7】:

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

【讨论】:

    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

        A) 使用“print(X)”来显示 X 的内容,或者

        B) 使用 IPython 控制台,只需键入 X 并按回车即可。这也可以让您快速揭示所讨论的 ML 函数是否在发挥作用。

        【讨论】:

        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

          我遇到了类似的问题,因为我坚持使用 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" 的dtype 无法在Spyder 的变量资源管理器中查看。

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

          【讨论】:

            【解决方案13】:

            这对我有用:

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

            【讨论】:

              【解决方案14】:

              添加

              X = pd.DataFrame(X)

              将 X 对象转换为可以在 spyder 中检查的数据帧也不会出错。

              为我工作!

              【讨论】:

                【解决方案15】:

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

                在第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)
                

                【讨论】:

                  【解决方案16】:

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

                  oneHotEncoder.fit_transform(X).toarray()
                  

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

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

                  【讨论】:

                    【解决方案17】:

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

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

                    【讨论】:

                      【解决方案18】:

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

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

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

                      您现在应该能够根据需要在变量查看器中查看数据以及分类变量。 当时我只是通过输入导入数据的名称自己在控制台中查看数据集,但这仍然是最新版本 Spyder 的工作方法。

                      【讨论】:

                        猜你喜欢
                        • 2020-11-24
                        • 1970-01-01
                        • 2019-05-28
                        • 2014-04-23
                        • 1970-01-01
                        • 2020-02-03
                        • 2012-02-13
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多