【问题标题】:Python | numpy | list indices must be integers, not tuple蟒蛇 |麻木 |列表索引必须是整数,而不是元组
【发布时间】:2017-11-14 18:04:53
【问题描述】:

我的数据文件是这样的

#weight, height and gender
45 145 f
89 154 m
56 163 m
-1 165 f
65 175 m
-1 125 m
65 169 f

您可以看到,对于 2 个条目,我的权重为 -1,这些是异常值,我想删除它们。即删除异常值的条目。 所以我尝试使用 numpy 读取这个文件,就像在 np.loadtxt 中一样,所以它的代码就像

data = np.loadtxt('whData.dat',dtype=np.object,comments='#',delimiter=None)
X = data[:,0:2].astype(np.float)
y = data[:,2]
X = X.T
...

为了去除异常值,我定义了一个函数,它迭代数据并返回没有异常值的新数据。

def remove_outlier2(data):
    non_outlier = []
    for x in data:
        if x[0] != '-1':
            non_outlier.append(x)
    return non_outlier

我在从文件加载数据后调用它,即

data = np.loadtxt('whData.dat',dtype=np.object,comments='#',delimiter=None)
data = remove_outlier2(data)
np.asarray(data)
X = data[:,0:2].astype(np.float)
y = data[:,2]
X = X.T
...

但是现在我得到了这个错误,我无法解决。

Traceback (most recent call last):

  File "<ipython-input-2-2aec95447a79>", line 1, in <module>
    runfile('C:/Users/xxx/py_workspace/pattern/whExample.py', wdir='C:/Users/xxx/py_workspace/pattern')

  File "C:\Users\xxx\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile
    execfile(filename, namespace)

  File "C:\Users\xxx\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/Users/xxx/py_workspace/pattern/whExample.py", line 79, in <module>
    X = data[:,0:2].astype(np.float)

TypeError: list indices must be integers, not tuple

我也尝试在从文件中读取数据后打印数据,在 Spyder 中看起来像这样

[['45' '145' 'f']
    ['89' '154' 'm']
    ['56' '163' 'm']
    ['-1' '165' 'f']
    ['65' '175' 'm']
    ['-1' '125' 'm']
    ['65' '169' 'f']]

我试图用谷歌搜索并找出我做错了什么,但无法弄清楚。 我该如何解决这个问题?

谢谢

【问题讨论】:

  • data.dtype 是什么?
  • 使用np.asarray()的输出
  • @Divakar 是对象
  • remove_outlier2(data) 的结果是一个列表,而不是numpy 数组。您需要通过data = np.asarray(data) 将其显式更改为数组
  • np.asarray(data) -> data = np.asarray(data)

标签: python numpy multidimensional-array


【解决方案1】:

所以最后根据评论部分的建议,我所要做的就是使用 np.asarray() 的输出,即

data = np.loadtxt('whData.dat',dtype=np.object,comments='#',delimiter=None)
# reomve outliers
data = remove_outlier2(data)
data = np.asarray(data)

一切都很好。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2012-03-11
    • 2011-06-14
    • 2014-07-13
    相关资源
    最近更新 更多