np.where () эквивалентно df.loc () - PullRequest
1 голос
/ 12 мая 2019

Я просто практикую \ изучаю панд и использую набор данных Pokemon из Kaggle.

Следующие две строки кода работают нормально и дают точно такой же результат:

df.loc[df['Type 1'] == 'Fire', 'Type 1'] = 'Flamer'

df['Type 1'] = np.where(df['Type 1'] == 'Fire', 'Flamer', df['Type 1'])

Оба заменяют значение «Огонь» в столбце «Тип 1» на «Фламер».

Однако я пытаюсь повторить то же поведение в нескольких столбцах. В следующих двух строках кода первая работает, вторая не работает. Точная ошибка также предоставляется:

df.loc[df['Total'] > 500, ['Generation', 'Legendary']] = 'TEST VALUE'

df[['Generation', 'Legendary']] = np.where(df['Total'] > 500, 'TEST VALUE', df[['Generation', 'Legendary']])
Traceback (most recent call last):
  File "C:/Users/Mark/PycharmProjects/main/main.py", line 152, in <module>
    df[['Generation', 'Legendary']] = np.where(df['Total'] > 500, 'TEST VALUE', df[['Generation', 'Legendary']])
ValueError: operands could not be broadcast together with shapes (800,) () (800,2)

Я не понимаю, что пытается сказать мне эта ошибка.

Могу ли я не реплицировать: df.loc [df ['Total']> 500, ['Generation', 'Legendary']] = 'TEST VALUE', используя np.where ()?

1 Ответ

0 голосов
/ 13 мая 2019

Как указал @Divakar, мой синтаксис был неверным.df ['Total']> 500 должно быть: df [['Total']]> 500 в моей строке кода np.where ().

df.loc[df['Total'] > 500, ['Generation', 'Legendary']] = 'TEST VALUE'

успешно реплицируется:

df[['Generation', 'Legendary']] = np.where(df[['Total']] > 500, 'TEST VALUE', df[['Generation', 'Legendary']])

Затем я сделал еще один шаг и дал столбцам 'Generation' и 'Legendary' свои уникальные значения.

Следующие две строки кода также дают одинаковые, правильные результаты:

df.loc[df['Total'] > 500, ['Generation', 'Legendary']] = ['Test 1', 'Test 2']

df[['Generation', 'Legendary']] = np.where(df[['Total']] > 500, [['TEST 1', 'TEST 2']], df[['Generation', 'Legendary']])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...