首页 文章

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

提问于
浏览
1

我有一个来自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 回答

  • 2

    实际上你倒退了,列表可以包含你想要的任何东西 . 但是你必须用整数访问它们 . 问题出在这里:

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

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

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

  • 0

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

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

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

    并替换它

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

    备注:

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

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

    len(movAvWindow)* 0.5

    代替 .

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

    set([list(x)for x in list])

相关问题