循环遍历字符串的数据集

时间:2014-04-30 22:04:01

标签: python string for-loop

我试图在我的数据集中选择一个值的特定事件,但一直遇到一个问题,即将值转换为字符串并循环遍历它们。我的代码如下:

data = np.genfromtxt('DurhamAirMass.txt')
spot = data[:,1]
mass = str(data[:,2])


DP = np.array([])
DT = np.array([])
MP = np.array([])
MT = np.array([])
TR = np.array([])

for i in range(1461):
    if mass[i] == '2':
        DP = np.append(DP, str(spot[i]))
    if mass[i] == '3':
        DT = np.append(DT, str(spot[i]))
    if mass[i] == '5':
        MP = np.append(MP, str(spot[i]))
    if mass[i] == '6' or '66' or '67':
        MT = np.append(MT, str(spot[i]))
    if mass[i] == '7':
        TR = np.append(TR, str(spot[i]))    

print DP

当我尝试打印出DP数组时,我收到一个指向第一个if语句的错误,并说" IndexError:字符串索引超出范围"。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

data[:,2]转换为字符串的目的是什么? 顺便说一句。 or无法正常工作,你必须重复`mass [i] ==``

为什么不:

data = np.genfromtxt('DurhamAirMass.txt')
mass = data[:, 1]
spot = data[:, 2]
DP = mass[spot == 2]
DT = mass[spot == 3]
MP = mass[spot == 5]
MT = mass[(spot == 6)||(spot == 66)||(spot == 67)]
TR = mass[spot == 7]

答案 1 :(得分:0)

您确实导致IndexError

尝试检查spot以查看其大小,我的猜测是1461大于其范围,或许您可以尝试将for循环设置为:

for i in range(len(spot)):
    ...

相反,这样可以确保您只能访问spot的有效索引,如果这仍然导致问题,请尝试mass

for i in range(len(mass)):
    ...

您还可以添加一项检查,以确保数据是您认为的数据。

print len(mass), len(spot), len(spot) == len(mass)

在出现错误的情况下,仔细检查您的假设始终是一种好习惯。在这种情况下,您明确被告知存在IndexError,因此下一步是找出导致它的索引。

也许更多信息可以帮到你?

try:
    for i in range(len(spot)):
        # code as usual
except:
    print i
    raise e 

这将告诉您导致错误的索引。

答案 2 :(得分:0)

作为一般规则,除非您希望将输入迭代器视为输入迭代器的大小/小于硬编码值的错误,否则不应对循环迭代进行硬编码(即便如此,更好的方法来实现这一目标。)

您的代码应该如下所示:

for i in range(len(data)):
    ...

这将确保您始终只循环实际拥有的数据。

答案 3 :(得分:0)

我只是将所有字符串更改为整数并解决了问题。我认为这不会起作用。谢谢大家的所有答案!

相关问题