基于多列组合创建Pandas布尔列时遇ValueError求助
解决Pandas创建布尔列时的ValueError问题
你遇到的这个错误根源是Python运算符优先级:&(按位与)和|(按位或)的优先级比==更高,导致你的表达式被错误解析——比如False & df_edit['Update Check']会试图把单个布尔值和整个Series做按位运算,这就触发了"truth value ambiguous"的报错。
修正方案:给每个比较条件加括号
要让逻辑运算符合你的预期,必须把每个单独的比较结果用括号包裹,确保先执行比较,再执行逻辑组合:
import pandas as pd df_edit = pd.DataFrame({ 'Included': [False, False, True, False], 'Update Check': [True, True, True, True], 'duplicate_fname': [True, False, False, False], 'duplicate_targetfname': [False, False, False, False] }) # 修正后的表达式,每个比较都用括号隔离 df_edit['test'] = (df_edit['Included'] == False) & \ (df_edit['Update Check'] == True) & \ ((df_edit['duplicate_fname'] == True) | (df_edit['duplicate_targetfname'] == True)) # 查看结果 print(df_edit['test'])
运行后输出的test列就是你期望的:
0 True 1 False 2 False 3 False Name: test, dtype: bool
更简洁的Pandas风格写法
你还可以利用Pandas对布尔Series的直接操作,简化代码(效果完全一致):
- 用
~代替== False(取反) - 直接用布尔列本身代替
== True
df_edit['test'] = ~df_edit['Included'] & \ df_edit['Update Check'] & \ (df_edit['duplicate_fname'] | df_edit['duplicate_targetfname'])
这样代码更简洁,也更符合Pandas的惯用写法。
内容的提问来源于stack exchange,提问作者Laurens de Wit
相关产品推荐
相关产品推荐

