提供一些数据:
>> s = pd.Series([True, False, True, False, True])
>> ~s.values == (~s).values
array([True, True, True, True, True])
但是
>> ~s.values.sum()
-4
>> (~s).values.sum()
2
和
>> x = ~s.values
>> x.sum() == (~s).values.sum()
True
为什么我们需要使用括号(~s).values
或将~s.values
存储在新变量中,以便~Series.sum()
在{{ 1}}?
这是由于优先级所致,如@ juanpa.arrivillaga和@cwallenpoole所述。确实:
False
答案 0 :(得分:4)
因为属性访问的precedence高于~
运算符的优先级。因此,求和之前必须先求和。
许多numpy / pandas对象会覆盖按位运算符,以进行矢量化计算。不幸的是,这将导致它们表现异常。
换句话说,它被评估为:
~((s.values).sum())
答案 1 :(得分:0)
这与评估顺序(或precedence)有关。 ~
使表达式向右反转。
答案 2 :(得分:0)
在不带括号的情况下,首先使用原始值调用sum()。然后将sum()的结果取反。使用(〜values.sum),这些值首先被取反,然后使用取反后的列表对sum()进行计算。