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

在Polars中解析带数字与SI前缀的字符串

解析带k/M/B后缀的字符串为数值(Polars实现)

针对包含千(k)、百万(M)、十亿(B)后缀的字符串列,这里提供两种高效的Polars实现方法,将其转换为对应的浮点数值:

方法一:正则提取+映射字典

通过正则提取后缀,结合映射字典匹配乘数,再与数字部分相乘得到结果:

import polars as pl

df = pl.DataFrame(dict(j=['1.2', '1.2k', '1.2M', '-1.2B']))

# 定义后缀与对应乘数的映射
multiplier_map = {
    'k': 1_000,
    'M': 1_000_000,
    'B': 1_000_000_000
}

result_df = df.with_columns(
    # 提取后缀并映射乘数,无后缀则用1
    pl.col('j').str.extract(r'([kMB])$', group_index=1).map_dict(multiplier_map, default=1)
    # 乘以去掉后缀后的数字转成的浮点数
    * pl.col('j').str.replace(r'[kMB]$', '').cast(pl.Float64)
    .alias('j')
)

print(result_df)

方法二:分支条件判断

通过when/then分支逻辑,针对不同后缀分别处理:

import polars as pl

df = pl.DataFrame(dict(j=['1.2', '1.2k', '1.2M', '-1.2B']))

result_df = df.with_columns(
    pl.when(pl.col('j').str.ends_with('k'))
    .then(pl.col('j').str.replace('k', '').cast(pl.Float64) * 1_000)
    .when(pl.col('j').str.ends_with('M'))
    .then(pl.col('j').str.replace('M', '').cast(pl.Float64) * 1_000_000)
    .when(pl.col('j').str.ends_with('B'))
    .then(pl.col('j').str.replace('B', '').cast(pl.Float64) * 1_000_000_000)
    .otherwise(pl.col('j').cast(pl.Float64))
    .alias('j')
)

print(result_df)

两种方法执行后都会得到目标格式的DataFrame:

shape: (4, 1)
┌───────────┐
│ j         │
│ ---       │
│ f64       │
╞═══════════╡
│ 1.2       │
│ 1200.0    │
│ 1.2e6     │
│ -1.2000e9 │
└───────────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:33:14