Python Pandas使用if判断列值返回ValueError错误如何解决
报错原因
你代码中使用if df['EV_Sales'] >= 15进行判断的逻辑存在问题:df['EV_Sales']是Pandas的Series类型,包含多行数据,df['EV_Sales'] >=15运算后返回的是一个由多个布尔值组成的序列,Python原生的if/else只能判断单个布尔值的真假,无法直接处理一整个布尔序列,因此抛出了该ValueError。
解决方法
以下是几种常用的高效实现方案,不需要用到循环和原生if/else:
方案1:使用numpy.where(最推荐,简洁高效)
专门用于二分类条件赋值场景,语法为np.where(条件, 满足条件时的值, 不满足条件时的值),代码如下:
df['WS_EV_Sales'] = np.where(df['EV_Sales'] >= 15, -1, 0)
如果需要对EV_Sales为空(NaN)的情况单独处理,可以再加一层判断,比如空值赋值为NaN的写法:
df['WS_EV_Sales'] = np.where(df['EV_Sales'].isna(), np.nan, np.where(df['EV_Sales'] >=15, -1, 0))
方案2:使用Pandas的loc条件赋值
先给新列赋默认值,再单独修改满足条件的行,可读性强:
# 先给所有行默认赋值为0 df['WS_EV_Sales'] = 0 # 把EV_Sales>=15的行修改为-1 df.loc[df['EV_Sales'] >= 15, 'WS_EV_Sales'] = -1
方案3:布尔序列转整数计算
利用布尔值True对应1、False对应0的特性,直接计算得到结果:
df['WS_EV_Sales'] = -(df['EV_Sales'] >= 15).astype(int)
内容的提问来源于stack exchange,提问作者Economist Learning Python
相关产品推荐
相关产品推荐

