Pandas TypeError问题求助:无法对bool类型数组与bool标量执行rand_操作
解决Pandas中使用.loc条件赋值时的TypeError问题
你遇到的这个错误其实是运算符优先级在搞鬼!咱们先看你写的代码:
dfT.loc[dfT.state == "CANCELLED" & (dfT.Activity != "created"), "Activity"] = "cancelled"
在Python里,位运算符&的优先级比比较运算符==、!=要高,所以这段代码会先执行"CANCELLED" & (dfT.Activity != "created")——你想想,字符串和布尔数组怎么能做位运算呢?这就直接触发了类型不匹配的错误,也就是你看到的TypeError: Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]。
修正方法
只需要把每个独立的比较条件都用括号包裹起来,让Pandas先计算每个条件的布尔结果,再进行逻辑与操作:
dfT.loc[(dfT.state == "CANCELLED") & (dfT.Activity != "created"), "Activity"] = "cancelled"
验证效果
用你给出的示例表格测试:
| ID | Activity | state |
|---|---|---|
| 1 | created | CANCELLED |
| 1 | completed | CANCELLED |
| 2 | created | FINNISHED |
| 2 | completed | FINISHED |
| 3 | created | REJECTED |
| 3 | rejected | REJECTED |
修正后的代码会把state为CANCELLED且Activity不是created的那一行(ID=1,Activity=completed)的Activity值改成cancelled,最终表格会变成:
| ID | Activity | state |
|---|---|---|
| 1 | created | CANCELLED |
| 1 | cancelled | CANCELLED |
| 2 | created | FINNISHED |
| 2 | completed | FINISHED |
| 3 | created | REJECTED |
| 3 | rejected | REJECTED |
这样就完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者Alde Joshua Wibowo
相关产品推荐
相关产品推荐

