为什么 any() 和 pd.any() return 有不同的值?

Why do any() and pd.any() return different values?

我最近发现内置函数 any() 不适用于 pandas 数据帧。

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

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

查看 any() 的文档,它说:

any(iterable) Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:

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,当您执行 [=15= 时,它会被解释为 False ].

遍历数据框就是遍历它的列标签,例如。 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

在您的情况下,只有 1 列带有默认标签 0(它是 数字 0,而不是字符串 '0' ), 你获得了

any(data),

相当于

any([0]),

这又是

any([False])

价值False.