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

Idr*_*ris 7 python machine-learning dataframe python-3.x pandas

过去 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)
Run Code Online (Sandbox Code Playgroud)

预期结果 :n=2

我得到什么:

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)
Run Code Online (Sandbox Code Playgroud)

Tre*_*ous 10

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

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


小智 5

iterrow返回一个tuple. 如果您需要访问所需列的索引,可以使用以下命令:

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

只是一个注释,您不需要循环行。你可以这样做:

n += (df2['nonTrivial']==True).sum()
Run Code Online (Sandbox Code Playgroud)