pandas 中“&”和“and”的区别

Der*_*ntz 2 python dataframe pandas

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

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

突然间,这个声明不再是“True”(df_temp 和 df_temp4 中都有数据:

if ( len(df_temp > 0) & len(df_temp4 > 0)):
    print "HERE"
Run Code Online (Sandbox Code Playgroud)

然而,这有效:

if ( len(df_temp > 0) and len(df_temp4 > 0)):
    print "HERE"
Run Code Online (Sandbox Code Playgroud)

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

MSe*_*ert 5

len(df_temp > 0)可能len(df_temp4 > 0)不会达到您的预期。pandas DataFrame 的比较运算符返回逐元素结果,这意味着它们创建一个布尔 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
Run Code Online (Sandbox Code Playgroud)

所以lenof 与ofdf相同:lendf > 0

>>> len(df)
3
>>> len(df > 0)
3
Run Code Online (Sandbox Code Playgroud)

“&”与“和”的区别

它们的含义不同:

由于您具体询问了 pandas(假设至少一个操作数是 NumPy 数组、pandas Series 或 pandas DataFrame):

  • &也指按元素“按位与”。
  • pandas 的元素级“逻辑与”不是and,但必须使用一个函数,即numpy.logical_and

有关更多解释,您可以参考“Python 中‘and’(布尔值)与‘&’(按位)之间的差异。为什么列表与 numpy 数组的行为存在差异?”

不知道什么会导致这个声明突然失败。

您没有提供“失败”或预期的行为,因此不幸的是我无法帮助您。