Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use format specifier to convert float/int column in polars dataframe to string

I have this code:

import polars as pl
df = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})
df.with_columns(pl.format('{:,.2f}', pl.col('size')))

But is fails:

ValueError - Traceback, line 3
      2 df = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})
----> 3 df.with_columns(pl.format('{:,.2f}', pl.col('size')))

File polars\functions\as_datatype.py:718, in format(f_string, *args)
    717     msg = "number of placeholders should equal the number of arguments"
--> 718     raise ValueError(msg)

ValueError: number of placeholders should equal the number of arguments

How can I format a float or int column using a format specifier like '{:,.2f}'?

like image 313
Phil-ZXX Avatar asked Oct 29 '25 10:10

Phil-ZXX


1 Answers

As outlined by @mozway, general format strings are not yet supported as part of pl.format. The corresponding feature request already contains a nice polars implementation of (the most common) C-style sprint formatting.

If efficiency is not too much of an issue (e.g. in exploratory data analysis), you can simply use pl.Expr.map_elements and fall back to the naive python solution.

df.with_columns(
    pl.col("size").map_elements(lambda x: f"{x:,.2f}", return_dtype=pl.String)
)
shape: (3, 1)
┌──────────┐
│ size     │
│ ---      │
│ str      │
╞══════════╡
│ 34.24    │
│ 1,232.22 │
│ -479.10  │
└──────────┘
like image 129
Hericks Avatar answered Oct 31 '25 01:10

Hericks