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

如何无需重复调用apply,对同一DataFrame列应用多自定义函数?

优化方案

方法1:封装统一处理函数

将所有文本处理逻辑(包括正则替换)整合到一个函数中,仅调用一次apply即可完成所有操作,代码更简洁易维护:

import re

def process_text(x):
    # 按顺序执行自定义替换
    x = replace_date(x)
    x = replace_name(x)
    x = replace_occupation(x)
    # 执行空格清理
    x = re.sub(' +', ' ', x)
    return x

# 一次性应用到目标列
df['mod'] = df['info'].apply(process_text)

方法2:函数组合(函数式编程风格)

如果偏好函数式写法,可使用functools.compose将多个处理函数组合,再一次性应用:

from functools import compose
import re

# 将正则清理封装为单独函数/匿名函数
clean_space = lambda x: re.sub(' +', ' ', x)

# compose按从右到左的顺序执行函数,需匹配原逻辑顺序
process_func = compose(clean_space, replace_occupation, replace_name, replace_date)

df['mod'] = df['info'].apply(process_func)

方法3:pandas pipe(适用于多列/复杂场景)

若需扩展到多列或更复杂的DataFrame操作,可使用pipe链式调用,但针对单列场景前两种方法更高效:

import re

def pipe_replace_date(df, col):
    df[col] = df[col].apply(replace_date)
    return df

def pipe_replace_name(df, col):
    df[col] = df[col].apply(replace_name)
    return df

def pipe_replace_occupation(df, col):
    df[col] = df[col].apply(replace_occupation)
    return df

def pipe_clean_space(df, col):
    df[col] = df[col].apply(lambda x: re.sub(' +', ' ', x))
    return df

# 初始化列后链式调用pipe
df['mod'] = df['info'].copy()
df = df.pipe(pipe_replace_date, 'mod')\
       .pipe(pipe_replace_name, 'mod')\
       .pipe(pipe_replace_occupation, 'mod')\
       .pipe(pipe_clean_space, 'mod')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:54:24