df[condition1 & condition2]和之间没有区别
df[(condition1) &(condition2)]。当您编写表达式并且运算符
&具有优先权时,会出现区别:
df = pd.Dataframe(np.random.randint(0, 10, size=(5, 3)), columns=list('abc')) dfOut: a b c0 5 0 31 3 7 92 3 5 23 4 7 64 8 8 1condition1 = df['a'] > 3condition2 = df['b'] < 5df[condition1 & condition2]Out: a b c0 5 0 3df[(condition1) & (condition2)]Out: a b c0 5 0 3
但是,如果您这样输入,则会看到错误消息:
df[df['a'] > 3 & df['b'] < 5]Traceback (most recent call last): File "<ipython-input-7-9d4fd21246ca>", line 1, in <module> df[df['a'] > 3 & df['b'] < 5] File "/home/ayhan/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py", line 892, in __nonzero__ .format(self.__class__.__name__))ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是因为
3 & df['b']首先进行评估(这与
False & df.col2.isnull()您的示例相对应)。因此,您需要将条件分组在括号中:
df[(df['a'] > 3) & (df['b'] < 5)]Out[8]: a b c0 5 0 3