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

pandas如何基于多字符串匹配条件为DataFrame新增列?

问题背景

需要为pandas DataFrame新增Content_Category列,规则基于vod_episode_name列的字符串匹配结果:字段值包含"Episode"或"Ep"任意一个关键词时,标记为"Series",否则留空。
原编写的代码如下:

import pandas as pd
name = 
r"C:\Users\saarif2201\Desktop\Classification\Vidio_Indonesia\VidioDataset-Apr'22.xlsx"
df = pd.read_excel(name)
consist = ["Episode","Ep"]
def cat_marking(x):
    if consist in (x):
      return "Series"
    else:
      return ""

df['Content_Category'] = df['vod_episode_name'].apply(cat_marking)
错误点

原判断逻辑完全倒置:代码中consist in x是检查关键词列表整体是否为当前字符串的子串,这个条件永远不可能成立,因此所有行最终都会返回空值,达不到预期匹配效果。同时原代码没有处理字段空值的情况,遇到NaN值时直接做in判断会抛出异常。

可行实现方案

方案1:修正自定义apply函数(适合小数据集,逻辑易读)

调整判断逻辑,检查当前字符串是否包含任意一个目标关键词,同时增加空值兼容处理:

import pandas as pd
name = r"C:\Users\saarif2201\Desktop\Classification\Vidio_Indonesia\VidioDataset-Apr'22.xlsx"
df = pd.read_excel(name)
keywords = ["Episode", "Ep"]

def get_category(content_name):
    if pd.isna(content_name):
        return ""
    if any(k in str(content_name) for k in keywords):
        return "Series"
    return ""

df['Content_Category'] = df['vod_episode_name'].apply(get_category)

方案2:向量化正则匹配(适合大数据集,性能更高,推荐)

使用pandas内置的字符串向量化操作,避免apply的逐行循环开销,运行效率远高于自定义apply方法:

import pandas as pd
name = r"C:\Users\saarif2201\Desktop\Classification\Vidio_Indonesia\VidioDataset-Apr'22.xlsx"
df = pd.read_excel(name)
keywords = ["Episode", "Ep"]

# 拼接正则规则,|代表逻辑或
match_pattern = "|".join(keywords)
# na=False指定空值按不匹配处理,最后将布尔结果映射为目标标签
df['Content_Category'] = df['vod_episode_name'].astype(str).str.contains(match_pattern, na=False).map({
    True: "Series",
    False: ""
})

匹配精度提示:如果不需要模糊匹配子串,要避免把"Epic""Episodee"这类包含关键词片段的内容误判,可以给正则增加单词边界,将match_pattern替换为r"\b(Episode|Ep)\b",只会匹配独立的"Episode"或"Ep"单词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:45:42