为什么any和pd.any返回不同的值?

问题描述

我最近发现内置函数any()对熊猫数据框不起作用。

import pandas as pd
data = pd.DataFrame([True,False])

print("base: " + str(any(data)))
print("pandas: " + str(data.any()))

结果:

base: False
pandas: 0    True
dtype: bool

有人可以解释这种行为背后的逻辑吗?

解决方法

遍历数据框就是遍历其列标签,例如e。 g。

In[3]: df = pd.DataFrame({"col_1": [1,2],"col_2": [3,4]})
In[4]: df
   col_1  col_2
0      1      3
1      2      4
In[5]: for i in df:
  ...:     print(i)
col_1
col_2

对于只有一列带有默认标签0(它是 number 0,而不是字符串'0')的情况,您获得了

any(data)

any([0])

依次为

any([False])

False

,

在文档中查找any(),它说:

any(iterable)如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False。等效于:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

如果您这样做:

for element in data:
    print(element)

它将显示0。

如果您执行print(list(data)),也会得到[0]-即具有一个元素的列表-0。

因此,当您遍历数据框本身(而不是行)时,您遍历列标签,在这种情况下,您只会得到一个0,当您执行False时,该引线将被解释为any(data)