You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars DataFrame中截断浮点数至指定小数位数?

Polars DataFrame浮点数截断至指定小数位的高效方法

你的当前方法通过字符串转换实现截断,确实存在步骤冗余且效率较低的问题,尤其是处理大数据集时。以下是几种更高效的方案:

1. 直接使用Polars内置的truncate函数

Polars提供了专门的truncate表达式,可直接对浮点数进行数值截断(区别于四舍五入),无需字符串转换:

import polars as pl

data = {
    "name": ["Alice", "Bob", "Charlie"],
    "grade": [90.23456, 80.98765, 85.12345],
}

df = pl.DataFrame(data)

# 截断至2位小数
result = df.with_columns(
    pl.col("grade").truncate(2).alias("truncated_grade")
)

print(result)

输出:

shape: (3, 3)
┌─────────┬───────────┬────────────────┐
│ name    ┆ grade     ┆ truncated_grade│
│ ---     ┆ ---       ┆ ---            │
│ str     ┆ f64       ┆ f64            │
╞═════════╪═══════════╪════════════════╡
│ Alice   ┆ 90.23456  ┆ 90.23          │
│ Bob     ┆ 80.98765  ┆ 80.98          │
│ Charlie ┆ 85.12345  ┆ 85.12          │
└─────────┴───────────┴────────────────┘

2. 手动数值计算实现截断

如果需要兼容旧版本Polars(truncate函数在0.17.0+引入),可以用数学方法实现:

# 截断至2位小数
decimal_places = 2
result = df.with_columns(
    ((pl.col("grade") * 10**decimal_places).floor() / 10**decimal_places).alias("truncated_grade")
)

原理是将浮点数放大指定倍数后取整(floor向下取整,对应截断),再缩小回原比例。

关于polars.Config.set_float_precision的说明

这个配置仅控制浮点数的显示精度,不会修改DataFrame中存储的实际数值。如果只是为了打印输出时简化显示,而非修改数据本身,可以使用:

pl.Config.set_float_precision(2)
print(df)

输出时grade列会显示为2位小数,但实际存储的还是原始的高精度数值。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:36:17