CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: Polars で行・列が省略されないようにする

今回は Python のデータフレームライブラリの Polars で、データフレームを表示するときに行と列が省略されないようにする方法について。 結論から先に述べると、省略したくないときは pl.Config.set_tbl_cols()pl.Config.set_tbl_rows() に負の整数 (たとえば -1) を指定すれば良い。 また、正の整数を指定すれば、その数までは省略されないように振る舞う。

使った環境は次のとおり。

$ sw_vers
ProductName:    macOS
ProductVersion: 12.6.2
BuildVersion:   21G320
$ uname -srm
Darwin 21.6.0 arm64
$ python -V
Python 3.10.9
$ python -m pip list | grep polars
polars            0.15.16

もくじ

下準備

サンプルデータとして Diamonds データセットの CSV ファイルをダウンロードしておく。

$ wget https://raw.githubusercontent.com/mwaskom/seaborn-data/master/diamonds.csv

そして、肝心の Polars をインストールする。

$ pip install polars

インストールできたら Python のインタプリタを起動する。

$ python

Polars をインポートして、先ほどダウンロードした CSV ファイルからデータフレームを生成する。

>>> import polars as pl
>>> df = pl.read_csv("diamonds.csv")

列が省略されないようにする

現在のバージョンでは、デフォルトで省略されずに表示される列は 8 列まで。 データフレームにそれ以上の列があるときは、表示するときに中間の列が「...」と省略される。

>>> df.head()
shape: (5, 10)
┌───────┬─────────┬───────┬─────────┬─────┬───────┬──────┬──────┬──────┐
│ carat ┆ cut     ┆ color ┆ clarity ┆ ... ┆ price ┆ x    ┆ y    ┆ z    │
│ ---   ┆ ---     ┆ ---   ┆ ---     ┆     ┆ ---   ┆ ---  ┆ ---  ┆ ---  │
│ f64   ┆ strstrstr     ┆     ┆ i64   ┆ f64  ┆ f64  ┆ f64  │
╞═══════╪═════════╪═══════╪═════════╪═════╪═══════╪══════╪══════╪══════╡
│ 0.23  ┆ Ideal   ┆ E     ┆ SI2     ┆ ... ┆ 3263.953.982.43 │
│ 0.21  ┆ Premium ┆ E     ┆ SI1     ┆ ... ┆ 3263.893.842.31 │
│ 0.23  ┆ Good    ┆ E     ┆ VS1     ┆ ... ┆ 3274.054.072.31 │
│ 0.29  ┆ Premium ┆ I     ┆ VS2     ┆ ... ┆ 3344.24.232.63 │
│ 0.31  ┆ Good    ┆ J     ┆ SI2     ┆ ... ┆ 3354.344.352.75 │
└───────┴─────────┴───────┴─────────┴─────┴───────┴──────┴──────┴──────┘

まったく省略してほしくないときは pl.Config.set_tbl_cols() に負の整数を指定する。

>>> pl.Config.set_tbl_cols(-1)
<class 'polars.cfg.Config'>

すると、次のように何列あっても省略されなくなる。

>>> df.head()
shape: (5, 10)
┌───────┬─────────┬───────┬─────────┬───────┬───────┬───────┬──────┬──────┬──────┐
│ carat ┆ cut     ┆ color ┆ clarity ┆ depth ┆ table ┆ price ┆ x    ┆ y    ┆ z    │
│ ---   ┆ ---     ┆ ---   ┆ ---     ┆ ---   ┆ ---   ┆ ---   ┆ ---  ┆ ---  ┆ ---  │
│ f64   ┆ strstrstr     ┆ f64   ┆ f64   ┆ i64   ┆ f64  ┆ f64  ┆ f64  │
╞═══════╪═════════╪═══════╪═════════╪═══════╪═══════╪═══════╪══════╪══════╪══════╡
│ 0.23  ┆ Ideal   ┆ E     ┆ SI2     ┆ 61.555.03263.953.982.43 │
│ 0.21  ┆ Premium ┆ E     ┆ SI1     ┆ 59.861.03263.893.842.31 │
│ 0.23  ┆ Good    ┆ E     ┆ VS1     ┆ 56.965.03274.054.072.31 │
│ 0.29  ┆ Premium ┆ I     ┆ VS2     ┆ 62.458.03344.24.232.63 │
│ 0.31  ┆ Good    ┆ J     ┆ SI2     ┆ 63.358.03354.344.352.75 │
└───────┴─────────┴───────┴─────────┴───────┴───────┴───────┴──────┴──────┴──────┘

正の整数を指定すると、その列数まで省略されないように振る舞う。 試しに 2 を指定してみよう。

>>> pl.Config.set_tbl_cols(2)

次のように 2 列だけ省略されずに表示されるようになった。

>>> df.head()
shape: (5, 10)
┌───────┬─────┬──────┐
│ carat ┆ ... ┆ z    │
│ ---   ┆     ┆ ---  │
│ f64   ┆     ┆ f64  │
╞═══════╪═════╪══════╡
│ 0.23  ┆ ... ┆ 2.43 │
│ 0.21  ┆ ... ┆ 2.31 │
│ 0.23  ┆ ... ┆ 2.31 │
│ 0.29  ┆ ... ┆ 2.63 │
│ 0.31  ┆ ... ┆ 2.75 │
└───────┴─────┴──────┘

行が省略されないようにする

同様に、行が省略されないようにしてみよう。 現在のバージョンのデフォルトでは 8 行まで省略されずに表示される。

>>> df.head(10)
shape: (10, 10)
┌───────┬─────┬──────┐
│ carat ┆ ... ┆ z    │
│ ---   ┆     ┆ ---  │
│ f64   ┆     ┆ f64  │
╞═══════╪═════╪══════╡
│ 0.23  ┆ ... ┆ 2.43 │
│ 0.21  ┆ ... ┆ 2.31 │
│ 0.23  ┆ ... ┆ 2.31 │
│ 0.29  ┆ ... ┆ 2.63 │
│ ...   ┆ ... ┆ ...  │
│ 0.24  ┆ ... ┆ 2.47 │
│ 0.26  ┆ ... ┆ 2.53 │
│ 0.22  ┆ ... ┆ 2.49 │
│ 0.23  ┆ ... ┆ 2.39 │
└───────┴─────┴──────┘

行をまったく省略したくないときは pl.Config.set_tbl_rows() に負の整数を指定すれば良い。

>>> pl.Config.set_tbl_rows(-1)
<class 'polars.cfg.Config'>

これで行が省略されなくなる。

>>> df.head(10)
shape: (10, 10)
┌───────┬─────┬──────┐
│ carat ┆ ... ┆ z    │
│ ---   ┆     ┆ ---  │
│ f64   ┆     ┆ f64  │
╞═══════╪═════╪══════╡
│ 0.23  ┆ ... ┆ 2.43 │
│ 0.21  ┆ ... ┆ 2.31 │
│ 0.23  ┆ ... ┆ 2.31 │
│ 0.29  ┆ ... ┆ 2.63 │
│ 0.31  ┆ ... ┆ 2.75 │
│ 0.24  ┆ ... ┆ 2.48 │
│ 0.24  ┆ ... ┆ 2.47 │
│ 0.26  ┆ ... ┆ 2.53 │
│ 0.22  ┆ ... ┆ 2.49 │
│ 0.23  ┆ ... ┆ 2.39 │
└───────┴─────┴──────┘

明示的に省略されるまでの行数を指定したいときは、先ほどと同じように正の整数を指定する。

>>> pl.Config.set_tbl_rows(2)
<class 'polars.cfg.Config'>
>>> df.head(10)
shape: (10, 10)
┌───────┬─────┬──────┐
│ carat ┆ ... ┆ z    │
│ ---   ┆     ┆ ---  │
│ f64   ┆     ┆ f64  │
╞═══════╪═════╪══════╡
│ 0.23  ┆ ... ┆ 2.43 │
│ ...   ┆ ... ┆ ...  │
│ 0.23  ┆ ... ┆ 2.39 │
└───────┴─────┴──────┘

いじょう。

参考

pola-rs.github.io

pola-rs.github.io