python - 模棱两可的真值 - For 循环和 If 语句
问题描述
追查以下错误消息背后的原因。
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是我正在运行的代码:
anz_analysis["Action"] = anz_analysis["Signal"]
for i in range(0, len(anz_analysis) + 1):
if ((anz_analysis["Signal"].iloc[[i]] == "Buy") & (anz_analysis["Signal"].iloc[[i+1]] == "Buy")):
anz_analysis["Action"] = anz_analysis["Signal"].iloc[[i]] = "Maintain"
elif (anz_analysis["Signal"].iloc[[i]] = "Sell") & (anz_analysis["Signal"].iloc[[i+1]] = "Sell"):
anz_analysis["Signal"].iloc[[i]] = "Maintain"
数据框如下所示:
Current: Wanted:
_______|_________
1|Buy | Buy
2|Buy | Maintain
3|Buy | Maintain
4|Sell | Sell
5|Sell | Maintain
6|Sell | Maintain
任何帮助,将不胜感激。
解决方案
使用.iloc[[i]]
返回一个Series
. 因此,即使 , 中只有一个值,Series
也会ValueError
出现,因为您正在将 aSeries
与 a进行比较str
。
处理此问题的一种方法是使用.iloc[[i]][0]
. 这将“提取”字符串并允许在相同类型之间进行比较。
更好的方法是使用 选择行和列iloc
。例如
anz_analysis["Action"] = anz_analysis["Signal"]
for i in range(len(anz_analysis) + 1):
if ((anz_analysis.iloc[i, 'Signal'] == "Buy") & (anz_analysis.iloc[i + 1, 'Signal'] == "Buy")):
anz_analysis["Action"] = anz_analysis.iloc[i, 'Signal'] = "Maintain"
elif (anz_analysis.iloc[i, 'Signal'] == "Sell") & (anz_analysis.iloc[i + 1, 'Signal'] == "Sell"):
anz_analysis.iloc[i, 'Signal'] = "Maintain"
编辑elif
根据@6502 对 OP 代码中可能错误的观察
更新了语句。0
还决定删除in的虚假起始值range
。
推荐阅读
- gnuplot - Gnuplot:不完整的 beta 函数
- database - Oracle:INTO 子句的 SQL 命令未正确结束
- scikit-learn - sklearn pairwise_distances 的预期行为与 force_all_finite = False?
- azure - 使用 Azure 虚拟机系统分配的托管标识从 Powershell 访问 Azure SQL
- android - 辅助功能服务中的应用打开事件类型
- swift - 如何从两个发布者 A 和 B 创建一个 Swift Combine 发布者,其中发布者 B 使用来自发布者 A 的值?
- sql - Exasol 中的数组聚合
- javascript - 为什么在 javascript 中使用模板字符串表达式 a=`${a}`?
- git - Git 帮助:忘记添加文件,切换分支,现在文件丢失了
- javascript - 解构后备以防止未定义的错误?