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
相关产品推荐
相关产品推荐

