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

为何Pandas的df.apply函数执行正则分类时返回None值

问题根源

  1. re.search参数顺序写反
    Python标准库re模块的search方法语法要求为:
re.search(pattern, 待匹配的字符串, flags=0)

你自定义函数里把「待匹配的单元格值」和「正则规则」的位置写反了,导致匹配逻辑完全错误:相当于把每个单元格的内容作为正则规则,去匹配固定字符串'microsoft|office|m365|o365',只有单元格内容刚好是这个固定字符串的子串时才会命中,和你的需求完全相反。
2. 次要问题:自定义函数的参数名容易产生误解,df['name'].apply()传入函数的是name列的单个单元格值,不是整列Series,命名为name_str这类语义更清晰。

修复后的apply写法

调整参数顺序,再加空值判断兼容异常值即可正常运行:

import re

def category(name_str):
    # 先处理非字符串/空值情况,避免运行报错
    if not isinstance(name_str, str):
        return 'Not Microsoft 365'
    pattern = 'microsoft|office|m365|o365'
    if re.search(pattern, name_str, re.IGNORECASE) is not None:
        return 'Microsoft 365'
    else:
        return 'Not Microsoft 365'

df['Category'] = df['name'].apply(category)

补充说明

你后续用str.contains的实现方案更符合Pandas向量化操作习惯,性能比逐行apply更高,更推荐使用。只需要补全默认值赋值和异常处理即可覆盖全部场景:

pattern = 'microsoft|office|m365|o365'
df['Category'] = 'Not Microsoft 365' # 先给全部行赋默认值
df.loc[df['name'].str.contains(pattern, case=False, na=False), 'Category'] = 'Microsoft 365'

参数na=False是为了让name列为空的行直接返回False,避免赋值时出现逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:03