Pandas循环判断报错ValueError: The truth value of a Series is ambiguous如何解决
问题原因
你触发报错的核心原因是:first['Was Voter Mafia?'] 调用的是整个DataFrame的Was Voter Mafia?列,返回的是完整的布尔值Series,而if判断只能接收单个布尔值,pandas无法判定一整列的布尔结果在if逻辑里的含义,因此抛出了歧义错误。你遍历每行时要读取当前行的对应字段,应该用迭代出来的row对象取值,而不是操作整个DataFrame的列。
修正方案
1. 循环写法修正
把判断里的first['Was Voter Mafia?']替换为row['Was Voter Mafia?']即可,同时注意修改行的值需要通过索引定位到原DataFrame,直接修改迭代出来的row不会生效:
for idx, row in first.iterrows(): # 普通玩家(非狼人)成功投中狼人的情况 if row['Was Voter Mafia?'] == 'N' and row['Was Voted Mafia?'] == 'Y': first.loc[idx, 'Accuracy'] = 1
2. 更高效的向量化写法(推荐)
pandas原生支持批量条件赋值,不需要写循环,性能更好代码更简洁:
# 初始化Accuracy为0 first['Accuracy'] = 0 # 满足条件的行设为1 first.loc[(first['Was Voter Mafia?'] == 'N') & (first['Was Voted Mafia?'] == 'Y'), 'Accuracy'] = 1
内容的提问来源于stack exchange,提问作者E_Sarousi
相关产品推荐
相关产品推荐

