我有这段代码:import polars as pldf = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})df.with_columns(pl.format('{:,.2f}', pl.col('size')))但是失败了:ValueError - Traceback,第 3 行...
我有这个代码:
import polars as pl
df = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})
df.with_columns(pl.format('{:,.2f}', pl.col('size')))
但失败了:
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
如何 float
使用类似格式说明符来 int
或 '{:,.2f}'
?
pl.format
可以识别文字 {}
,与 python 的 f 字符串不同(如果你运行, df.with_columns(pl.format('{:,.2f}'))
你会看到它 {:,.2f}
保持不变)。
因此您无法按照 pl.format
自己想要的方式使用(如对问题的评论所述, 这是一个功能请求 )。
这里 描述的其中一种方法 。
代码 pl.format
( {}
上分割字符串 f_string.split("{}")
并将其与中间的表达式连接起来:
def format(f_string: str, *args: Expr | str) -> Expr:
if f_string.count("{}") != len(args):
msg = "number of placeholders should equal the number of arguments"
raise ValueError(msg)
exprs = []
arguments = iter(args)
for i, s in enumerate(f_string.split("{}")):
if i > 0:
e = wrap_expr(parse_into_expression(next(arguments)))
exprs.append(e)
if len(s) > 0:
exprs.append(F.lit(s))
return concat_str(exprs, separator="")