Polarsで全てnullの列を削除する

[edit 2023/12/06]
MSのBing Chat改めCopilotに聞いたら、最初エラーになるコードだったのですが、エラーメッセージを教えたらちゃんと直してくれて、こんなコード書いてくれました。

import polars as pl

# データフレームを作成
df = pl.DataFrame({
    "col1": [1, 2, None],
    "col2": [None, None, None],
    "col3": [None, 4, 5]
})

# 全ての値がnullの列を削除
df = df.drop([col for col in df.columns if df[col].is_null().all()])

print(df)

[edit 2023/07/11]
この記事、元は違うやり方で書いたのですが、本家のDataFrame.drop_nulls()リファレンス polars.DataFrame.drop_nulls — Polars documentation に、全てnullの列を削除するコード例があって、それを真似たやり方だとこんな感じです。こっちの方が意図がわかりやすい。

# 全てnullの列を削除
def drop_null_columns(df):
    return df.select(
        [col.name for col in df if not (col.null_count() == df.height)]
    )

df = ...
df.pipe(drop_null_columns)


[当初書いたやつ]
Pandasだとこんな感じのことをしたい。

df.dropna(how='all', axis='columns')

Polarsではズバリのメソッドは無いみたい。なのでこんな感じかな。

# 全てnullの列を削除
# 参考サイト
# https://stackoverflow.com/questions/75446886/selecting-columns-based-on-a-condition-in-polars
# https://stackoverflow.com/questions/74295124/polars-selecting-all-columns-without-nans

def drop_null_columns(df):
    return df.select(
        [col.name for col in df.select(~pl.all().is_null().all()) if col.all()]
    )

df = ...
df.pipe(drop_null_columns)