假设我有一个框架:

>>> import polars
>>> df = polars.DataFrame(dict(j=['1.2', '1.2k', '1.2M', '-1.2B']))
>>> df
shape: (4, 1)
┌───────┐
│ j     │
│ ---   │
│ str   │
╞═══════╡
│ 1.2   │
│ 1.2k  │
│ 1.2M  │
│ -1.2B │
└───────┘

我该如何解析上面的内容来得到:

>>> df = polars.DataFrame(dict(j=[1.2, 1_200, 1_200_000, -1_200_000_000]))
>>> df
shape: (4, 1)
┌───────────┐
│ j         │
│ ---       │
│ f64       │
╞═══════════╡
│ 1.2       │
│ 1200.0    │
│ 1.2e6     │
│ -1.2000e9 │
└───────────┘
>>>

推荐答案

你可以用str.extract()str.strip_chars()来分割这些部分,然后用Expr.replace() + Expr.pow()得到结果:

df.with_columns(
    pl.col('j').str.strip_chars('KMB').cast(pl.Float32) *
    pl.lit(10).pow(
        pl.col('j').str.extract(r'(K|M|B)').replace(['K','M','B'],[3,6,9]).fill_null(0)
    )
)

┌─────────────┐
│ j           │
│ ---         │
│ f64         │
╞═════════════╡
│ 1.2         │
│ 1200.000048 │
│ 1.2000e6    │
│ -1.2000e9   │
└─────────────┘

Python相关问答推荐

具有症状的分段函数:如何仅针对某些输入值定义函数?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

无法使用equals_html从网址获取全文

如何在Python中使用io.BytesIO写入现有缓冲区?

Python 3.12中的通用[T]类方法隐式类型检索

如何根据参数推断对象的返回类型?

通过Selenium从页面获取所有H2元素

使可滚动框架在tkinter环境中看起来自然

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

Python中绕y轴曲线的旋转

如何在Raspberry Pi上检测USB并使用Python访问它?

调用decorator返回原始函数的输出

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

在极中解析带有数字和SI前缀的字符串

Pandas:计算中间时间条目的总时间增量

如何使用使用来自其他列的值的公式更新一个rabrame列?

如何获得3D点的平移和旋转,给定的点已经旋转?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样