如何检查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
相关产品推荐
相关产品推荐

