TypeError:list indices必须是整数,而不是numpy.float64

时间:2015-08-26 10:21:12

标签: python list integer

我有一个来自csv文件的两个列表,我只想彼此相减。错误消息指示我将列表项转换为整数,但它们不是整数。我试图将它们转换为浮点数,整数等等。

如何查找列表当前包含的数据类型?一般不能在列表中使用浮点项进行计算吗?我做错了什么?

打印列表(似乎是不同的数据类型):

data_WL
>>> [' 0.4001000 ', '0.3966472 ', '0.4365047', '0.4950109', '0.5348455 ', '0.5816008 ']
res_movAvWL
>>> [0.3983736, 0.41657595000000003, 0.4657578, 0.5149282, 0.55822315]

我的代码:

from pylab import *
import csv
from scipy import stats
import numpy as np

mymin = [] # create a new array
data_WL1 = [ float(x) for x in data_WL ] # convert items to float

for i in arange(0,len(data_WL)- (0.5 * movAvWindow),1):   
    mymin.append=((data_WL1[i]) - (res_movAvWL[i])) # data_WL - movAvWL;     detrended peak flood data
    res_WLnet = mymin[:] # create a new array which has the same items as mymin

    if int(res_WLnet[i]) < 0.8: # if netWL smaller than 0.8m print 0 in list res_WLnet, etc.
        res_WLnet.append(0)
    else:
        if int(mymin[i]) < 1.10:
            res_WLnet.append(1)
        else:
            res_WLnet.append(2)

print res_WLnet

谢谢!

2 个答案:

答案 0 :(得分:2)

你确实倒退了,列表可以包含你想要的任何内容。但是你必须用整数访问它们。问题出在这里:

for i in arange(0,len(data_WL)- (0.5 * movAvWindow),1):   
    mymin.append=((data_WL1[i]) - (res_movAvWL[i]))

您正在使用i来访问列表的索引,但请注意在确定i应该迭代的范围时使用浮点数。这引入了尝试访问data_WL1[0.5]的可能性(您可能实际上得到了不同的结果)。

根据您对该范围的确切意图,您可能希望使用int(len(data_WL)- (0.5 * movAvWindow))来确保i以整数递增。

答案 1 :(得分:0)

尝试打印mymin,我打赌它是空的。

您需要从此行中删除“=”

mymin.append=((data_WL1[i]) - (res_movAvWL[i]))

并将其替换为

mymin.append(data_WL1[i] - res_movAvWL[i])

说明:

  • 您的data_WL列表需要像您一样转换为浮点数,因为它最初是一个字符串列表(注意引号)

  • 我不知道什么是movAvWindow,如果它是一个数字就可以,但是如果它是一个列表,请确保你没有将它与浮点数相乘,使用

    len(movAvWindow)* 0.5

代替。

  • 列表可能包含不同类型的值,如果要检查所有类型,请使用:

    设置([列表中x的类型(x)])