В пандах можно сделать:
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() нужно выполнять по частям, чтобы выполнить агрегацию.
Есть ли способ найти нет. нулей в каждом столбце в фрейме данных polars без перебора каждого столбца?
В любом случае, чтобы ускорить его, особенно. когда df_polars.collect() не лучший вариант для большого набора данных.






Предполагая, что вы не женаты на выходном формате, идиоматический способ сделать это...
df.select(pl.all().is_null().sum())
Однако, если вам действительно нравится вывод dict, вы можете легко его получить...
df.select(pl.all().is_null().sum()).to_dicts()[0]
Это работает так: внутри select мы начинаем с pl.all(), что означает все столбцы, а затем, как и в версии для панд, мы применяем is_null, что возвращает True/False. Из этого мы цепляем sum, который превращает Trues в 1 и дает вам количество нулей в каждом столбце.
Также есть выделенный null_count(), так что вам не нужно связывать is_null().sum(), спасибо @jqurious за этот совет.
Прохладный! И сбор идет после выбора. Потрясающий!
Также есть специальный .null_count
Может
df_polars.collect().null_count()? Как это работает с LazyFrame?