基于子字符串匹配条件填充Pandas空列的报错问题求助
问题原因
- 核心错误是字典访问逻辑完全错位:
cat_type_dic的键是需要匹配的职位名字符串(比如'Analytics'),但你循环中用df的行索引整数i去访问字典cat_type_dic[i],自然会触发非整数键的索引报错。 df.loc["Job_Title"]语法错误:loc的第一个参数是行索引,要取指定行的Job_Title列应该写df.loc[i, "Job_Title"]。- 赋值逻辑错误:你直接对整个
df["Categories"]列操作,就算匹配成功也会覆盖全列,而非仅修改匹配到的行,且str.replace完全不符合填充分类的需求。
解决方案
推荐优先使用Pandas向量化操作,性能远高于逐行循环,实现代码如下:
# 先初始化Categories列为空字符串或默认分类 df["Categories"] = "" # 遍历分类映射字典的键值对 for keyword, category in cat_type_dic.items(): # 匹配Job_Title包含当前关键词的行,填充对应分类 df.loc[df["Job_Title"].str.contains(keyword, case=False, na=False), "Categories"] = category
补充说明:
str.contains的case=False参数表示不区分大小写匹配,na=False表示遇到空值的Job_Title直接返回不匹配,避免报错。
如果要保留逐行循环的写法,修正后的代码如下:
for i in range(len(df)): # 取当前行的职位名称 job_title = df.loc[i, "Job_Title"] # 遍历字典匹配关键词 for keyword, category in cat_type_dic.items(): if keyword in str(job_title): df.loc[i, "Categories"] = category # 匹配到第一个关键词就跳出,避免多个关键词匹配冲突,不需要可以去掉 break
内容的提问来源于stack exchange,提问作者MatmataHi
相关产品推荐
相关产品推荐

