如何找到编号。Polars 数据帧中每一列的 null 值?

How to find the no. of nulls in every column in a polars dataframe?

提问人:alvas 提问时间:5/10/2023 最后编辑:General Grievancealvas 更新时间:9/10/2023 访问量:1215

问:

在熊猫中,人们可以做:

import pandas as pd

d = {"foo":[1,2,3, None], "bar":[4,None, None, 6]}
df_pandas = pd.DataFrame.from_dict(d)
dict(df_pandas.isnull().sum())

[输出]:

{'foo': 1, 'bar': 2}

在极坐标中,可以通过循环遍历列来执行相同的操作:

import polars as pl

d = {"foo":[1,2,3, None], "bar":[4,None, None, 6]}
df_polars = pl.from_dict(d)

{col:df_polars[col].is_null().sum() for col in df_polars.columns}

在使用 时,在极坐标中循环列特别痛苦,然后必须分块进行聚合。LazyFrame.collect()

有没有办法找到没有。在极坐标数据帧中每列中都有空值,而不遍历每列?

python pandas 数据帧 null python-polars

评论

0赞 alvas 5/10/2023
或?它如何与 LazyFrame 配合使用?df_polars.collect().null_count()
0赞 alvas 5/10/2023
无论如何,加快速度,尤其是对于大型数据集来说,什么时候不是最好的选择。df_polars.collect()

答:

3赞 Dean MacGregor 5/10/2023 #1

假设您没有与输出格式结婚,那么惯用的方法是......

df.select(pl.all().is_null().sum())

但是,如果您真的喜欢 dict 输出,您可以轻松获得它......

df.select(pl.all().is_null().sum()).to_dicts()[0]

其工作方式是,在“我们以”开头“(即所有列)中,然后,就像在 pandas 版本中一样,我们应用将返回 True/False。从中,我们链接将 True 转换为 1,并为您提供每列中的空值数。selectpl.all()is_nullsum

还有专用的,因此您不必链接,这要归功于该提示的@jqurious。null_count()is_null().sum()

评论

0赞 alvas 5/10/2023
凉!收集是在选择之后。棒!
4赞 jqurious 5/10/2023
还有一个专用的.null_count
0赞 VanJeer 9/10/2023 #2

如果要逐行计数,请改用以下命令:df.hstack(df.transpose().select(pl.all().is_null().sum()).transpose().rename({"column_0": "null_count"}))

评论

2赞 jqurious 9/10/2023
.sum_horizontal() 将是这样做的惯用方法,例如 - 转置是一项成本高昂的操作,如果可能,最好避免。df.with_columns(null_count = pl.sum_horizontal(pl.all().is_null()))