np.where()等同于df.loc()

时间:2019-05-12 20:18:42

标签: python python-3.x pandas numpy

我只是在练习\学习熊猫,并且正在使用Pokemon数据集 来自Kaggle。

以下两行代码可以正常工作,并产生完全相同的结果:

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

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

将'Type 1'列中的'Fire'值都替换为'Flamer'。

但是,我试图在多个列上复制相同的行为。 在以下两行代码中,第一行有效,第二行失败。 还会提供确切的错误:

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)

我不明白该错误试图告诉我什么。

我不能使用np.where()复制df.loc [df ['Total']> 500,['Generation','Legendary']] ='TEST VALUE'吗?

1 个答案:

答案 0 :(得分:0)

正如@Divakar指出的那样,我的语法是错误的。 df [''Total']> 500必须是:在我的np.where()代码行中是df [[''Total']]> 500。

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']])