如何无需重复调用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
相关产品推荐
相关产品推荐

