AttributeError:返回“ str”对象没有属性“ str”

时间:2020-02-11 19:41:12

标签: python pandas

我有以下熊猫数据框。

Dataframe 1

我需要一个for循环来评估熊猫Col_B中的每个单元格,以查看它是否包含字符串'MM'。如果确实包含它,我希望为Col_C输入Col_B中单元格的整个值。我想要的输出将仅显示Col_C的最后三行,其值为“ 500.0MM”。当我运行以下代码时,我得到:

代码:

for row in range(total_rows):
if df.iloc[row,1].str.contains('MM'):
    df.iloc[row,2] = df.iloc[row,1]
else:
    pass

错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-10-e4521d65e7b6> in <module>
  1 for row in range(total_rows):
  ----> 2     if df.iloc[row,1].str.contains('MM'):
  3         df.iloc[row,2] = df.iloc[row,1]
  4     else:
  5         pass

  AttributeError: 'str' object has no attribute 'str'

在运行循环之前,我曾尝试将Col_B转换为如下所示的字符串,但仍然会收到错误。

df['Col_B'] = df['Col_B'].astype(str)

我意识到循环可能不是最有效的方法,最好使用apply,但出于其他原因,我需要将其作为循环。

2 个答案:

答案 0 :(得分:1)

如果df.iloc [row,1] .str会做什么?如错误消息所述,srting没有属性rep(seq_len(n), seq_len(n)) 。我认为您想要的只是使用您刚刚引用的字符串:

str

答案 1 :(得分:0)

自指定行和列以来,

df.iloc[row,1]已返回所需的字符串。因此,您无需使用.str就可以使用它,并且不需要pandas contains()方法:

for row in range(total_rows):
if 'MM' in df.iloc[row,1]:
    df.iloc[row,2] = df.iloc[row,1]
else:
    pass