PythonにはDataFrameを扱うライブラリがいくつかあり、人それぞれで好きなものが違うと思います。
王道のpandas
を使う人、APIの清潔さに惹かれてpolars
を使う人(僕)、GPUで高速化するためにcuDF
を使う人、頑なにpyarrow
を使う人(見たことない)など...
これらを統一的に扱えるnarwhals
というライブラリがあったので紹介します。DataFrameを引数に取るようなライブラリを開発するときは、積極的に使っていきたいですね。
ちなみに"narwhal"はイッカクというクジラの一種で、こう名付けた理由は "coz they are so awesome" だかららしく、こちらのYouTubeの動画の通りとのことです。欧米のノリ、微塵もついていけない。
使い方
多くのAPIはpolars
から来ています。polars
が一番きれいなので当然の設計です。DataFrameの引数・返り値をFrameT
で型注釈してnarwhalify
で関数をデコレートすることで任意のDataFrameで動きます。
import narwhals as nw
from narwhals.typing import FrameT
@nw.narwhalify
def func(df: FrameT, value: float) -> FrameT:
return df.with_columns(
x_added=nw.col("x") + value
)
例えば、
import polars as pl
func(pl.DataFrame({"x": [1, 3, 5]}), 10)
shape: (3, 2)
┌─────┬─────────┐
│ x ┆ x_added │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════════╡
│ 1 ┆ 11 │
│ 3 ┆ 13 │
│ 5 ┆ 15 │
└─────┴─────────┘
import pandas as pd
func(pd.DataFrame({"x": [1, 3, 5]}), 10)
x x_added
0 1 11
1 3 13
2 5 15
narwhalify
はmethodにも使えるみたいです。
以上です。