无法通过以下方式迭代DataFrame:出现以下错误:元组索引必须是整数或切片,而不是str

时间:2019-01-14 17:39:36

标签: python python-3.x pandas dataframe machine-learning

过去30分钟,我一直在尝试调试代码,但无济于事,也许您可​​以提供帮助?

错误在于第17行,但我真的不知道为什么会这样。

因此,我正在使用字典来存储函数is_nontrivial_reverse_number()返回的数据,该数据是boolean类型。我对其进行迭代,并将所有值从0插入到1100

然后,我将字典插入具有DataFrame库的pandas中。

然后,我遍历dataFrame以检索设置为true的值的计数。

但是问题是,即使我在不​​同的字典和数据框集上使用了相同的功能,row["nonTrivial"]似乎也不起作用。

import pandas as pd2

dic2 = {'nonTrivial': [is_nontrivial_reverse_number(x) for x in range(0, 1100)]}
dic2

df2 = pd2.DataFrame(dic2)
df2 = df2.set_index('nonTrivial')

#df2.head()
##df2.shape
#df.dtypes



for row in df2.iterrows():
    if (row["nonTrivial"]==True):
        n = n+1
print (n)

预期结果:n=2

我能得到什么:

TypeError                                 Traceback (most recent call last)
<ipython-input-314-ce7c400929e6> in <module>
     15
     16 for row in df2.iterrows():
---> 17     if (row["nonTrivial"]==True):
     18         n = n+1
     19 print (n)

TypeError: tuple indices must be integers or slices, not str

3 个答案:

答案 0 :(得分:1)

iterrow返回一个tuple。如果您需要访问所需列的索引,可以使用以下方法进行操作:

for row in df2.iterrows():
    if (row[1][df.columns.get_loc('nonTrivial') == True):
        n = n+1

仅需注释,就无需循环行。您可以这样做:

n += (df2['nonTrivial']==True).sum()

答案 1 :(得分:0)

尝试:

for row in df2.iterrows():
   if (row[1]["nonTrivial"]==True):
         n = n+1

答案 2 :(得分:0)

为什么没有人提到他可以像在 for 循环中解压元组

for index, row in df2.iterrows():
    if (row["nonTrivial"]==True):
        n = n+1
    print (n)