itterows проблемы обновления для pandas - PullRequest
0 голосов
/ 10 января 2020

У меня есть набор данных:

    id   name  m
0   1    mina  0
1   1    sara  0
2   2    travi 0
3   3    caty  0
5   4    el    0
6   6    tom   0

Я написал следующий код для изменения моего фрейма данных

for index, row in df.iterrows():
     if(row['m']==0):
          df.loc[df['id'] ==row['id'] ,'m'] = 1
      print(row['name'])

, и в результате

  mina
  sara
  travi
  caty
  el
  tom

мой вопрос почему печатается второй ряд? Есть ли способ ее решить?

Ответы [ 2 ]

1 голос
/ 10 января 2020

Это то, что вам нужно?

for item in df['id']:
      if ((df.loc[df['id'] == item, 'm'].values[0]) == 0):
            df.loc[df['id'] == item, 'm'] = 1  
       print(item)
0 голосов
/ 10 января 2020

Проверка pandas документация https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html

В нем говорится:

Вы никогда не должны изменять то, что вы повторяете. Это не гарантирует работу во всех случаях. В зависимости от типов данных итератор возвращает копию, а не представление, и запись в него не будет иметь никакого эффекта.

Вот почему это происходит. Используйте что-то вроде этого: print('\n'.join(df.drop_duplicates(subset='id')[name]))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...