Pandas DataFrame中比较两个值运行报错的原因排查
问题原因
你代码中提取的musketeers和almond是pandas Series对象,而非单个数值标量。哪怕筛选条件匹配结果只有一行,通过loc筛选后索引列返回的仍然是一维Series结构。直接对两个Series执行>比较会返回布尔类型的Series,而if语句无法直接判定Series的布尔真值,因此会抛出The truth value of a Series is ambiguous类报错。
修复方案
你可以任选以下任意一种方法把取值转换为单个数值标量:
- 用
.iloc[0]取Series的第一个元素
musketeers = candy_data.loc[candy_data.competitorname == '3 Musketeers', 'winpercent'].iloc[0] almond = candy_data.loc[candy_data.competitorname == 'Almond Joy', 'winpercent'].iloc[0]
- 用
.squeeze()压缩只有单个元素的Series为标量
musketeers = candy_data.loc[candy_data.competitorname == '3 Musketeers', 'winpercent'].squeeze() almond = candy_data.loc[candy_data.competitorname == 'Almond Joy', 'winpercent'].squeeze()
- 用
.item()提取单个元素(适用于pandas较新版本)
musketeers = candy_data.loc[candy_data.competitorname == '3 Musketeers', 'winpercent'].item() almond = candy_data.loc[candy_data.competitorname == 'Almond Joy', 'winpercent'].item()
修改后两个变量均为单个浮点数值,即可正常执行if比较逻辑。
内容的提问来源于stack exchange,提问作者user15014634
相关产品推荐
相关产品推荐

