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

Pandas apply调用自定义正则函数无效果的问题及解决方案

Pandas apply调用自定义正则函数无生效问题排查

问题场景

自定义正则匹配函数在独立传入字符串测试时运行正常,但对DataFrame直接调用apply时仅返回原始单元格值,无法得到正则捕获结果。因业务需要处理大型DataFrame,iterrows、itertuples等遍历方法性能不足,必须使用apply类方案。

相关代码

自定义正则匹配函数

import re
def match_pattern(df_cell): 
    if type(df_cell) == str:
        result = re.search(r'(?:[0-9]{1,4}\s)(.*)(?=\nName)', df_cell)
        if result:
            print('result.group(1)',result.group(1))
            return result.group(1)
        else:
            print('no result')
            return df_cell
    else:
        return df_cell

单测验证(运行正常)

string = '3971 Small Arms Survey\nName'
string2 = 'nothing here'
match_pattern(string) # 输出预期结果'Small Arms Survey'
match_pattern(string2) # 输出原字符串'nothing here'

错误调用写法(无预期效果)

import pandas as pd
frame = pd.DataFrame(['3971 Small Arms Survey\nName'])
frame2 = frame.apply(lambda x: match_pattern(str(x)))
frame2 # 输出原字符串'3971 Small Arms Survey\nName'

调试时可以观察到print('result.group(1)',result.group(1))会正常触发,但最终返回的仍是原始单元格值。

问题根因

直接对整个DataFrame调用apply时,传入函数的参数是整列的Series对象,而非单个单元格的字符串值,即使额外做了str转换也无法得到正确的单元格内容,导致返回结果无法正确生效。

解决方法

如果只需要处理指定列,直接对单列调用apply即可:

frame = frame[0].apply(match_pattern) # 单元格输出预期结果'Small Arms Survey'

如果需要对全表所有单元格应用该规则,可以使用针对单元格级别的applymap方法:

frame = frame.applymap(match_pattern)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:04