【问题标题】:TypeError: list indices must be integers, not numpy.float64TypeError:列表索引必须是整数,而不是 numpy.float64
【发布时间】:2015-11-20 08:05:01
【问题描述】:

我有两个来自 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

谢谢!

【问题讨论】:

  • 请尽量坚持每个帖子只问一个问题。我回答了你的错误。更清楚地说,是的,您可以使用浮点数在列表中进行计算。完全没问题。要找出某物是什么类型,请使用isinstance(var, type)。有关它的详细信息,请参阅this question

标签: python list integer


【解决方案1】:

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

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

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

替换成

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

备注:

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

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

    len(movAvWindow) * 0.5

改为。

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

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

【讨论】:

  • 非常感谢,这两个建议都让我走上了解决问题的道路。一次一个问题,面向未来。
【解决方案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 以整数递增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多