У меня есть следующий датафрейм панд.

Dataframe 1

Мне нужен цикл for для оценки каждой ячейки в пандах Col_B, чтобы увидеть, содержит ли она строку «MM». Если он действительно есть, я хочу, чтобы все значение ячейки в Col_B было введено для Col_C. Мой желаемый вывод будет показывать только последние три строки 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 может быть лучшим, но мне нужно, чтобы оно было циклом по другим причинам.

-1
CodeNoob 11 Фев 2020 в 22:41

2 ответа

Лучший ответ

Что вы ожидаете, если df.iloc [row, 1] .str делать? Как говорится в сообщении об ошибке, у srting нет атрибута str. Я думаю, что вы хотите просто использовать строку, на которую вы только что ссылались:

if "MM" in df.iloc[row,1]:
1
Prune 11 Фев 2020 в 19:46

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
0
Jakob F 11 Фев 2020 в 19:55