You need to enable JavaScript to run this app. Python Pandas全数据范围如何将X,X%格式的百分值替换为X.X%
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas全数据范围如何将X,X%格式的百分值替换为X.X%

Pandas 全数据范围非标准百分格式定向替换方案

核心处理规则严格匹配需求:仅替换夹在两个数字字符之间、且属于百分号前数值段的逗号,不会误伤文本分句逗号、非百分结构的千位分隔逗号等其他内容。

实现代码

单列定向处理(仅针对ingredients_text列,列内全量单元格覆盖)

如果仅需要处理指定的文本列,直接对列的字符串方法做正则替换即可:

# 对目标列全量内容做替换
df['ingredients_text'] = df['ingredients_text'].str.replace(
    pat = r'(\d+),(\d+%)',
    repl = r'\1.\2',
    regex = True
)

全数据框覆盖处理

如果需要遍历整个数据框所有单元格,对所有符合规则的文本内容统一替换,可使用如下写法(仅对字符串类型内容生效,数值型等其他类型内容不做改动):

import re

df = df.applymap(
    lambda cell: re.sub(r'(\d+),(\d+%)', r'\1.\2', cell) if isinstance(cell, str) else cell
)

规则适配调整

如果需要避免误改千位分隔的百分写法(例如原生想表达1000%、写为1,000%时,不希望被替换为1.000%),可以调整匹配规则,仅识别逗号后紧跟1-2位小数的结构,对应的正则匹配规则修改为:

  • pat = r'(\d+),(\d{1,2}%)'

处理效果示例

原始内容替换后内容触发逻辑
小麦粉含量 5,5%,食用盐小麦粉含量 5.5%,食用盐逗号夹在两个数字之间,且后续绑定%
水分 12,3%,总糖 0,25%水分 12.3%,总糖 0.25%多个符合规则的片段会被全部替换
添加剂总量 1,000mg/100g添加剂总量 1,000mg/100g逗号后续无%绑定,不触发替换
配料表: 糖, 盐, 水配料表: 糖, 盐, 水逗号两侧不是数字,不触发替换

相比逐行循环判断的实现,基于Pandas内置字符串方法的正则替换处理效率更高,可覆盖列内/数据框内所有匹配的内容,不会出现遗漏。单列处理时使用Pandas内置的str.replace方法,默认开启正则支持,不需要额外导入正则模块;全数据框逐单元格处理时,因为直接操作Python原生字符串,需要导入re模块调用re.sub实现正则替换,两者的匹配和替换逻辑完全一致,不会出现处理结果的偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 07:06:06