我在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 bit(AMD64)]
答案 0 :(得分:22)
这是一个很好的例子
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中查看数据,将arrray转换为dataframe。
变量explorer接受数据帧。以上是正确的和检查过的代码
答案 1 :(得分:17)
( Spyder开发人员)将在Spyder 4 中添加对对象数组的支持,将于2019年发布。
答案 2 :(得分:10)
我在没有dataFrame
和.values
的情况下使用了相同的内容。
它对我有用。
x = dataset.iloc[:, :-1]
y = dataset.iloc[:,3]
答案 3 :(得分:8)
解决方案:将spyder版本降级为3.2.0
你可以通过转到anaconda-navigator来实现这一目的。
如果您正在关注机器学习的Udemy课程,那么讲师可能正在使用旧版本的Spyder并且它正在为他工作。在3.2.8这样的新版本中,它不起作用,但可以在未来的版本中加入。
答案 4 :(得分:6)
我已经分析了代码,直到可能失败的point。
Spyder的数组编辑器似乎不支持显示混合类型的数组(对象数组)。
在这里,您可以看到supported formats。
第一次使用它时,有些东西让我很困惑:当你点击数据集时,你点击一个数组变量就会得到相同的编辑器。
如果是数组类型的变量,则会收到 ArrayEditor 小部件。我认为打电话是here。
但是对于 DataFrame 类型的变量,您会收到 DataFrameEditor 。我认为打电话是here
问题是这两个小部件看起来或多或少相同,所以人们倾向于认为在两种情况下都会得到相同的结果,但 DataFrameEditor 允许混合类型和 ArrayEditor < / strong>没有。
您可以尝试在IPython控制台中检查数组变量,直到最终在 Spyder 中为正确的Widgets发布支持。
答案 5 :(得分:4)
这是因为数组有多个数据类型,因此无法显示具有多个数据类型的对象,因为它无法选择单个类型。但如果它只有一种数据类型,则类型为' float64'所以可以看到。
答案 6 :(得分:3)
你可以做两件事来绕过Spyder中的变量查看器。你可以
A)使用&#34; print(X)&#34;揭示X的内容,或
B)只需输入X并点击return即可简单地使用IPython控制台。这也让你能够快速揭示所讨论的ML功能是否在起作用。
答案 7 :(得分:3)
使用以下代码:
dataset = pd.read_csv('Data.csv')
X = pd.DataFrame(dataset.iloc[:, :-1].values)
答案 8 :(得分:3)
只要您的变量类型不相同,并且在变量资源管理器中,您将此视为对象,这意味着变量需要在您的情况下转换为相同类型。 您可以使用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 :(得分:2)
使用spyder的更新版本,您无法再使用变量资源管理器查看混合数组。您可以在控制台中打印数组以进行检查。
答案 10 :(得分:2)
Spyder尚未支持,但您可以使用IPyhon Console通过直接键入变量名来打印这些值。
答案 11 :(得分:1)
我遇到了类似的问题,因为我坚持使用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_test
和y_train
&#34;对象&#34; 的dtype,无法在变量资源管理器中的Spyder上查看。
当我使用教师使用的确切行时:
y = labelencoder_y.fit_transform(y)
。
dtype更改为int64
,可以在变量资源管理器中查看。
答案 12 :(得分:1)
这对我有用:
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())
答案 13 :(得分:1)
添加
X = pd.DataFrame(X)
将X对象转换为可以在spyder中检查的数据框,也没有错误。
为我工作!
答案 14 :(得分:0)
我遇到了同样的问题。问题是行
X=oneHotEncoder.fit_transform(X).toarray()
哪个不会将数据分配回X阵列。相反,以下行应该解决问题:
import java.text.DecimalFormat;
import java.util.Scanner;
public class JavaApplication3 {
public static void main(String[] args){
double baseDiamond, baseDiamondPrice, preDiamond, preDiamondPrice, baseDiamondCalc, finalECoins;
Scanner input = new Scanner(System.in);
System.out.print("What is your current Diamond Miner level? ");
preDiamondPrice = input.nextDouble();
System.out.print("Enter what diamondminer level ");
baseDiamondPrice = input.nextDouble();
while (baseDiamondPrice > 0) {
baseDiamondPrice = ((baseDiamondPrice * 500000) + 1000000);
baseDiamondPrice--;
}
while (preDiamondPrice > 0) {
preDiamondPrice = ((preDiamondPrice * 500000) + 1000000);
preDiamondPrice--;
}
baseDiamondCalc = (baseDiamondPrice - preDiamondPrice);
DecimalFormat dRemover = new DecimalFormat("0.#");
System.out.println("You need " +dRemover.format(baseDiamondCalc)+ " ecoins for diamond miner level "+dRemover.format(baseDiamondPrice)+".");
}}
答案 15 :(得分:0)
这是因为数据未编码。所有分类数据都应该是#34;编码的#34;。 查看sypder(https://i.stack.imgur.com/uApwt.jpg)的变量资源管理器中的数据后,很明显 X包含有关某个国家/地区的数据(如[France,44.0,72000]),因此应对国家/地区的名称进行编码, y包含&#34;是&#34;或&#34;否&#34;,所以它也应该被编码
在第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 :(得分:0)
如果数据具有相同类型,例如int或float,它将显示在变量资源管理器中,否则,例如,如果数据具有字符串和int,则不支持。
但是有检查数据的解决方案,您可以在IPython Console中进行。
答案 17 :(得分:0)
我实际上已经完成了本课程,并且讲师从未在变量查看器中打开对象。我回去检查,他实际上确实尝试过,并遇到了与您完全相同的问题。在查看数据集时,他在控制台中而不是在变量查看器中查看。
如上所述,您可以将整个对象转换为一个数据框,然后可以在变量查看器中打开它:
dataset = pd.read_csv("data.csv")
dataframe = pd.DataFrame(dataset)
您现在应该可以根据需要在变量查看器中查看数据以及分类变量。 当时,我只是通过输入导入数据的名称在控制台中自己查看了数据集,但这仍然是最新版本的Spyder上的一种可行方法。