You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:42:02