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

DataFrame列值格式化:处理百分比格式并更新原列

处理DataFrame中百分比文本的格式修正方案

给定如下DataFrame:

data = {
  "txt": ['12 MG/0.6 ML  8 MG/0.4 ML  12.5 MG  25 MG  39.5%  20%  550 MG  75 MG  800 MG  9 MG  75 MG/0.5 ML  0.03%  0.10%  1%  2% 0.50%', '12 MG/0.6 ML']
}

需要完成两个格式修正,并直接应用到df['txt']列:

  • 数值与%之间添加空格,例如39.5%转为39.5 %;
  • 若小数末尾为0(如0.10%),先去除末尾的0再添加空格,转为0.1 %;

最终预期输出的DataFrame为:

data = {
  "txt": ['12 MG/0.6 ML  8 MG/0.4 ML  12.5 MG  25 MG  39.5 %  20 %  550 MG  75 MG  800 MG  9 MG  75 MG/0.5 ML  0.03 %  0.1 %  1 %  2 % 0.5 %', '12 MG/0.6 ML']
}

实现代码

使用Pandas结合正则表达式可以高效完成这个需求,代码如下:

import pandas as pd

# 初始化DataFrame
data = {
  "txt": ['12 MG/0.6 ML  8 MG/0.4 ML  12.5 MG  25 MG  39.5%  20%  550 MG  75 MG  800 MG  9 MG  75 MG/0.5 ML  0.03%  0.10%  1%  2% 0.50%', '12 MG/0.6 ML']
}
df = pd.DataFrame(data)

# 正则替换处理百分比格式
df['txt'] = df['txt'].str.replace(
    r'(\d+(?:\.\d*?)0?)%',
    lambda match: f"{match.group(1).rstrip('0').rstrip('.') if '.' in match.group(1) else match.group(1)} %",
    regex=True
)

# 查看结果
print(df['txt'].tolist())

代码说明

  • 正则表达式(\d+(?:\.\d*?)0?)%:匹配所有整数或小数后跟%的模式,涵盖带末尾0的小数情况;
  • 匿名函数lambda match:对匹配到的内容做处理:
    • 如果是小数(包含.),先去掉末尾的0,再去掉可能残留的小数点(比如0.50处理后为0.5);
    • 如果是整数(无.),直接保留原数值;
    • 最后统一添加 %完成格式修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:46:02