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

如何在pandas DataFrame中基于正则匹配列值执行对应处理逻辑

pandas混合类型列格式化实现方案

问题场景

从Excel读取数据生成pandas DataFrame时,单列可能同时包含文本、整数、小数三类值。本次待处理列的示例原始值为:Does not apply、2、5、0.07、0.45、7% offset,常规整数正则匹配方案无法覆盖全部处理逻辑。

处理规则

  • 纯整数值:值前添加$前缀
  • 小于1的纯小数值:数值乘以100后添加%后缀
  • 任意位置包含非数字文本的值:保留原值不做修改
    对应预期处理结果:Does not apply、$2、$5、70%、45%、7% offset(注:示例中0.07对应70%为输入笔误,实际原始值应为0.7,以下代码严格遵循给定规则实现)

实现代码

先将值统一转为字符串做正则匹配,区分纯数字内容和带文本的内容,再按规则分别处理,兼容pandas读取时自动识别的int、float、str三种数据类型。

import pandas as pd
import re

def format_mixed_val(val):
    s_val = str(val).strip()
    # 匹配纯整数
    if re.fullmatch(r'\d+', s_val):
        return f'${s_val}'
    # 匹配小于1的纯小数
    if re.fullmatch(r'0\.\d+', s_val):
        return f'{int(float(s_val) * 100)}%'
    # 带文本内容直接返回原值
    return val

# 调用示例:替换为实际列名即可
# df['your_col_name'] = df['your_col_name'].apply(format_mixed_val)

效果验证

按规则处理示例值的结果:

  • Does not apply:含文本,返回原值
  • 2:纯整数,返回$2
  • 5:纯整数,返回$5
  • 0.7:小于1的纯小数,0.7*100=70,返回70%
  • 0.45:小于1的纯小数,0.45*100=45,返回45%
  • 7% offset:含文本,返回原值
    完全符合预期输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:25