我有一个df,我想运行类似的东西:
subsetdf= df.loc[(df['Item_Desc'].str.contains('X')==True) or \
(df['Item_Desc'].str.contains('Y')==True ),:]
选择所有具有Item Desc列的子行为" X"或" Y"。
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我运行时遇到错误。有什么帮助吗?
答案 0 :(得分:7)
使用|
代替or
。所以:
df.loc[(cond1) | (cond2), :]
or
运算符想要比较两个布尔值(或两个计算结果为True或False的表达式)。但是Series(或numpy数组)并不简单地计算为True或False,在这种情况下,我们想要逐个元素地比较两个系列。为此,您可以使用|
,称为“按位或”。
熊猫遵循这些笨拙的惯例。请参阅pandas文档中的here以获取解释。
答案 1 :(得分:2)
条件应如下
df.loc[(cond1) | (cond2)]
每个条件也必须括在括号中。括号中的优先级高于按位“OR”运算符。如果没有提供括号,它也会给出相同的错误