Pandas DataFrame按条件计算新列报ValueError真值歧义错误如何解决
错误原因
- 原生Python的
if...else语法仅支持判断单个布尔值,无法直接对Pandas整列序列做逐元素条件判断,Pandas无法确定将整个序列转换为单个布尔值的规则,因此抛出真值歧义错误 - Pandas多条件组合不能使用
and/or这类Python原生逻辑运算符,需要使用位运算符&(对应且)/|(对应或),且每个条件必须用括号包裹避免优先级冲突
解决代码
最简便高效的方案是使用numpy.where实现逐元素条件分支,修改后完整代码如下:
import pandas as pd import numpy as np d = {'year': [2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001], 'day': [1, 2, 3, 4, 1, 2, 3, 4,], 'month': [1, 1, 1, 1, 2, 2, 2, 2], 'tg': [10, 11, 12, 13, 50, 21, -1, 23], 'rain': [1, 2, 3, 2, 4, 1, 2, 1]} df = pd.DataFrame(data=d) # 核心修改行 df["score"] = np.where((df["tg"] > 10) & (df["tg"] < 32), df["tg"] * 5, df["tg"] / 2) print(df)
如果不想额外引入numpy依赖,也可以用Pandas自带的mask方法实现:
df["score"] = df["tg"] / 2 df["score"] = df["score"].mask((df["tg"] > 10) & (df["tg"] < 32), df["tg"] * 5)
内容的提问来源于stack exchange,提问作者Mr. Hankey
相关产品推荐
相关产品推荐

