我只是在练习\学习熊猫,并且正在使用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'吗?
答案 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']])