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

Posted

技术标签:

【中文标题】DataFrame 无法迭代:出现以下错误:元组索引必须是整数或切片,而不是 str【英文标题】:DataFrame can't be iterated through: getting following error: tuple indices must be integers or slices, not str 【发布时间】:2019-06-08 17:45:00 【问题描述】:

过去 30 分钟我一直在尝试调试我的代码,但无济于事,也许你能帮忙?

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

所以,我使用字典来存储我的函数is_nontrivial_reverse_number() 返回的数据,这是一个boolean 类型。我遍历它并插入从01100 的所有值。

然后我将我的字典插入到带有pandas 库的DataFrame 中。

然后我遍历我的 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

【问题讨论】:

iterrows 返回一个元组。将for row in df2.iterrows() 更改为for idx, row in df2.iterrows() 【参考方案1】:

试试:

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

【讨论】:

【参考方案2】:

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 建议 OP 不要使用循环。我自己不是熊猫用户,但多次听到以避免循环。 非常感谢您的建议,从现在开始我将避免使用循环。虽然很遗憾这并没有解决我的错误,尽管它在我的第一本词典上就像一个魅力。 非常感谢您的帮助先生!现在我的代码就像一个魅力,再次感谢您的提示,我会好好利用它 @hqkhan 有时需要循环,尤其是当您需要在迭代之间维护状态时。避免循环并不总是可能的。最好先让您的代码工作,然后确定是否可以避免循环:#poitroae【参考方案3】:

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

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

【讨论】:

这是最简单的解决方案!谢谢。

以上是关于DataFrame 无法迭代:出现以下错误:元组索引必须是整数或切片,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章

panda迭代

限制 2 元组中元素的出现次数

Python dict 将值作为 pandas DataFrame 的元组

Pandas DataFrame 删除元组或列列表

pd.DataFrame 上的 for 循环继续运行,但在 100 次迭代后停止工作

Django 迁移错误:错误:“选择”必须是可迭代的(例如,列表或元组)