大熊猫中“&”和“ and”之间的区别

时间:2019-01-22 20:01:26

标签: python pandas dataframe

我有一些代码(通过kubernetes)在cron上运行了几个月。

昨天,我的部分代码无法正常工作:

这句话突然间不是“ True”(df_temp和df_temp4都包含数据:

if ( len(df_temp > 0) & len(df_temp4 > 0)):
    print "HERE"

但是,这可行:

if ( len(df_temp > 0) and len(df_temp4 > 0)):
    print "HERE"

是否存在某种会导致此更改的代码推送?由于我已经运行了几个月的代码,所以不确定是什么导致该语句突然失败。

4 个答案:

答案 0 :(得分:2)

len(df_temp > 0)len(df_temp4 > 0)可能没有达到您的期望。带有pandas DataFrames的比较运算符将返回按元素计算的结果,这意味着它们将创建一个布尔型DataFrame,其中每个值都表明DataFrame中的对应值是否大于零:

>>> import pandas as pd
>>> df = pd.DataFrame({'a': [-1,0,1], 'b': [-1,0,1]})
>>> df
   a  b
0 -1 -1
1  0  0
2  1  1
>>> df > 0
       a      b
0  False  False
1  False  False
2   True   True

因此len的{​​{1}}与df的{​​{1}}相同:

len
  

“&”和“ and”之间的区别

它们的含义不同:

由于您专门询问了熊猫(假设至少一个操作数是NumPy数组,pandas系列或pandas DataFrame):

  • &也指逐元素的“按位与”。
  • 用于熊猫的按元素分类的“逻辑与”不是and,而是必须使用一种函数,即numpy.logical_and

有关更多说明,请参见"Difference between 'and' (boolean) vs. '&' (bitwise) in python. Why difference in behavior with lists vs numpy arrays?"

  

不确定导致该语句突然失败的原因。

您没有提供“失败”或预期的行为,因此很遗憾,我在这里无法为您提供帮助。

答案 1 :(得分:1)

他们的行为完全不同。
当您使用&时,您正在比较布尔值,但是当您使用and时,您在逻辑上是和。建议您阅读完整的答案以了解更多信息。
Logic operator for boolean indexing in Pandas

答案 2 :(得分:0)

您用错误的逻辑&运算符替换了错误应用的位运算符and

首先,您应该使用and运算符,因为您真正想要的是带有逻辑运算符的逻辑表达式。

当长度没有公共位时,按位&运算符将失败。

在Python中尝试以下操作。

True and 1 & 1
True and 1 & 2

答案 3 :(得分:0)

逻辑上,这两个语句是不同的。 &表示按位运算符。 AND表示逻辑与。