Pandas使用np.where报错ValueError: either both or neither of x and y should be given排查
问题原因与修复方案
核心错误原因
你代码里一共存在两个明显问题,共同触发了报错:
- 第一是变量名覆盖冲突:你最初的
df是Pandas DataFrame对象,但后续写了df = asset.str.contains('(NETHERLANDS)')这行代码,直接把df变量重写为了布尔类型的Series,后续执行df['asset_name']赋值时,已经无法操作原数据表了。 - 第二是**
np.where参数缺失**:np.where的标准语法是np.where(判断条件, 条件为真的返回值, 条件为假的返回值),你最内层的np.where(pet2, 'PETROBAS GLOBAL FINANCE BV')只传了判断条件和真值返回值,没有传假值的默认返回值,直接触发了你遇到的ValueError。
修复后代码
import numpy as np import pandas as pd asset = df['asset_name'] diamond = asset.str.contains('DIAMOND OFFSHORE DRILLING INC') cliffs = asset.str.contains('CLIFFS NATURAL RESOURCES INC') deu = asset.str.contains('DEUTSCHE BANK AG') # 修改变量名,不要覆盖原df netherlands_flag = asset.str.contains('(NETHERLANDS)') pet = asset.str.contains('PETROBRAS INTERNATIONAL FINANCE COMPANY') pet2 = asset.str.contains('PETROBRAS GLOBAL') df['asset_name'] = np.where(diamond, 'DIAMOND OFFSHORE DRILLING INC', np.where(cliffs, 'CLIFFS NATURAL RESOURCES INC', np.where(deu, 'DEUTSCHE BANK AG', np.where(netherlands_flag, 'DEUTSCHE FINANCE (NETHERLANDS) BV', np.where(pet, 'PETROBRAS INTERNATIONAL FINANCE COMPANY SA', # 最内层补全假值返回值,默认返回原asset的内容即可 np.where(pet2, 'PETROBAS GLOBAL FINANCE BV', asset))))))
内容的提问来源于stack exchange,提问作者Lauren95
相关产品推荐
相关产品推荐

