You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查Polars布尔型DataFrame的所有值是否均为True?

如何检查Polars布尔型DataFrame的所有值是否均为True?

嘿,这个问题挺实用的!我来给你几种靠谱的方法,刚好适配你的场景——毕竟你的DataFrame里还可能混着null值,这细节可得处理好~

首先得明确:在Polars里,null既不是True也不是False,所以只要DataFrame里存在null或者False,就不符合“所有值都是True”的要求。咱们一步步来:

方法一:直接全量检查(最简洁)

先把每个元素都判断是否严格为True(null和False都会被转成False),再整体检查所有结果是否都是True:

import polars as pl

# 你的示例DataFrame
df = pl.DataFrame({
    "a": [True, True, None],
    "b": [True, True, True],
})

# 核心代码
all_values_true = df.select(pl.all().is_true().all()).item()
print(all_values_true)  # 输出False,因为a列有个None

解释下:

  • pl.all().is_true():遍历所有列的每个元素,把True保留为True,False和null都转为False
  • .all():把整个DataFrame的结果聚合,判断是否全部为True
  • .item():把Polars的Series结果转成普通布尔值,方便直接使用

方法二:先查列再查整体(更清晰)

如果你想先看看每一列的情况,再判断整体是否达标,可以分两步来:

# 先检查每一列是否全为True
column_check_results = df.select(pl.all().is_true().all())
# 再检查所有列的结果是否都是True
all_values_true = column_check_results.select(pl.all()).item()
print(all_values_true)  # 同样输出False

顺便解决你提到的小细节

你说df.select(pl.all() >= 1)会保留null,这确实是Polars的设计——比较操作中,null和任何值比较都会返回null。如果想生成布尔DataFrame时就把null转成False,加个fill_null(False)就行:

df = pl.DataFrame({
    "a": [1, 2, None],
    "b": [4, 5, 6],
})
# 处理null后的布尔DataFrame
bool_df = df.select((pl.all() >= 1).fill_null(False))
print(bool_df)

输出会变成:

shape: (3, 2)
┌───────┬───────┐
│ a     ┆ b     │
│ ---   ┆ ---   │
│ bool  ┆ bool  │
╞═══════╪═══════╡
│ true  ┆ true  │
│ true  ┆ true  │
│ false ┆ true  │
└───────┴───────┘

之后再用前面的方法检查全True就没问题啦~

备注:内容来源于stack exchange,提问作者mouwsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:40:29