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

pandas的str.contains在关键词与特殊字符无空格时失效,如何简化处理?

解决方案

你不需要创建和删除临时字段,也无需提前删除括号,之前匹配失败的核心原因是你写的正则模式里给Episode后加了强制空格,导致(Episode这类关键词前接括号、无空格的场景无法命中,直接调整匹配规则即可:

import pandas as pd
import numpy as np

watched_df = pd.DataFrame([['Love Death Robots (Episode 1)'], 
                   ['James Bond'],
                   ['How I met your Mother (Avnsitt 3)'], 
                   ['random name'],
                   ['Random movie 3 Episode 8383893']], 
                  columns=['Title'])

# 直接在原Title列匹配,无需中间字段
watched_df["Film_Type"] = np.where(
    watched_df['Title'].str.contains(r'Episode|Avnsitt', case=False),
    'Series',
    'Movie'
)

print(watched_df)

如果要避免匹配到把Episode/Avnsitt作为子串的其他单词(比如出现Episodexyz这类不需要命中的内容),可以给模式加单词边界限定,改为r'\b(Episode|Avnsitt)\b',无论关键词前后是括号、空格、标点都可以正确识别为独立单词。

关于类SQL LIKE功能的疑问:pandas.Series.str.contains()本身就是和SQL LIKE完全对应的函数,甚至支持正则,灵活性更高:

  • 等价于SQL title LIKE '%Episode%' OR title LIKE '%Avnsitt%'的效果,直接用上述代码即可实现
  • 如果你不需要正则能力,担心特殊字符被识别为正则元字符,可以加参数regex=False,多关键词可以通过逻辑或组合:
    cond = watched_df['Title'].str.contains('Episode', case=False, regex=False) | watched_df['Title'].str.contains('Avnsitt', case=False, regex=False)
    watched_df["Film_Type"] = np.where(cond, 'Series', 'Movie')
    

内容的提问来源于stack exchange,提问作者Sebastian ten Berge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:04