Python 如何确保和数组中的索引只包含有效的输入?

Python 如何确保和数组中的索引只包含有效的输入?,python,pandas,Python,Pandas,所以,我试图对一个数组进行热编码,这个问题就出现了。每当我尝试执行代码时,它都会说有索引错误。我正在谷歌实验室编写代码 我曾尝试使用双方括号来解决这个问题,但仍然没有解决方案 def read_dataset(): df = pd.read_csv("sonar.all-data.csv") x = df[df.columns[0:60]].values y = df[df.columns[60]] encoder = LabelEncoder() enc

所以,我试图对一个数组进行热编码,这个问题就出现了。每当我尝试执行代码时,它都会说有索引错误。我正在谷歌实验室编写代码

我曾尝试使用双方括号来解决这个问题,但仍然没有解决方案

def read_dataset():
    df = pd.read_csv("sonar.all-data.csv")
    x = df[df.columns[0:60]].values
    y = df[df.columns[60]]
    encoder = LabelEncoder()
    encoder.fit(y)
    y = oneHotEncode(y)
    return(x, y)

def oneHotEncode(labels):
    n_labels = len(labels)
    n_unique_labels = len(np.unique(labels))
    oneHE = np.zeros((n_labels, n_unique_labels))
    oneHE[np.arange(n_labels), labels] = 1
    return oneHE
预期输出是一个包含所有自变量的数组x,以及包含所有因变量的数组y,该因变量是一个热编码的。但将显示以下错误消息:

IndexError Traceback
oneHE[np.arange(n_labels), labels] = 1 

IndexError: only integers, slices (`:`), ellipsis (`...`),    numpy.newaxis (`None`) and integer or boolean arrays are valid indices

我会在你想要的范围内循环。嵌套列表是用
List[x][y]
引用的,而不是
List[x,y]

你说的索引应该等于一,即
np.arange(n_标签),labels
。这就是你想要的还是你忘了把它们作为函数的参数

你现在所做的相当于

import numpy as np
a = [1,2,3,4,5]
a[np.arange(5), [1,2,3,4,5]] = 1

但是表达式
np.arange(5),[1,2,3,4,5]
的计算结果是
(数组([0,1,2,3,4]),[1,2,3,4,5])
,因此您尝试使用的索引是数组和列表的元组

我会在你想要的范围内循环。嵌套列表是用
List[x][y]
引用的,而不是
List[x,y]

你说的索引应该等于一,即
np.arange(n_标签),labels
。这就是你想要的还是你忘了把它们作为函数的参数

你现在所做的相当于

import numpy as np
a = [1,2,3,4,5]
a[np.arange(5), [1,2,3,4,5]] = 1

但是表达式
np.arange(5),[1,2,3,4,5]
的计算结果是
(数组([0,1,2,3,4]),[1,2,3,4,5])
,因此您尝试使用的索引是数组和列表的元组

将来,为了更加清晰,将您的进口产品包括在内将是有益的

我这样做:

x = df[df.columns[0:max(df.__len__(), 60)]].values
y = df[df.columns[0:max(df.__len__(), 60)]]

使用
\uuuu len\uuuu
应该可以避免索引问题。我不确定您的csv文件的大小,但有60个,因为最大arg可能需要,也可能不需要。

将来,为了更加清晰,将导入内容包括在内将是有益的

我这样做:

x = df[df.columns[0:max(df.__len__(), 60)]].values
y = df[df.columns[0:max(df.__len__(), 60)]]

使用
\uuuu len\uuuu
应该可以避免索引问题。我不确定您的csv文件大小,但有60个,因为最大参数可能需要,也可能不需要。

我可以通过以下方式重现您的错误:

In [1]: labels = ['one','two']                                                                               
In [2]: arr = np.zeros((2,2))                                                                                
In [3]: arr[np.arange(2), labels]                                                                            
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-957dfbe132f5> in <module>
----> 1 arr[np.arange(2), labels]

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

一般来说,我们不会事先测试指标的有效性。相反,我们使用它们并从错误中学习。此错误消息枚举numpy数组的有效索引类型。如果您想了解更多详细信息,请研究numpy文档。

我可以通过以下方法重现您的错误:

In [1]: labels = ['one','two']                                                                               
In [2]: arr = np.zeros((2,2))                                                                                
In [3]: arr[np.arange(2), labels]                                                                            
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-957dfbe132f5> in <module>
----> 1 arr[np.arange(2), labels]

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

一般来说,我们不会事先测试指标的有效性。相反,我们使用它们并从错误中学习。此错误消息枚举numpy数组的有效索引类型。如果您想了解更多详细信息,请研究numpy文档。

为什么尝试使用双方括号?哪里这与错误消息有什么关系?为什么尝试使用双方括号?哪里这与错误消息有什么关系。错误不会发生在数据帧索引中,也不会说任何关于越界值的内容。错误不会发生在数据帧索引中,也不会说任何关于越界值的内容。这与错误消息有什么关系?我在操作代码中没有看到嵌套列表
oneHE
是通过
np.zeros
调用创建的。在列表上使用此索引会产生不同的错误消息。这与错误消息有什么关系?我在操作代码中没有看到嵌套列表
oneHE
是通过
np.zeros
调用创建的。对列表使用此索引会产生不同的错误消息。