0
3

【Python】DataFrame系ライブラリ統一されてた

Posted at

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

narwhalifymethodにも使えるみたいです。
以上です。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3