如何用正则清洗Jobs列?保留职业词汇、去除冗余代码与"Job"单词
解决方案
问题分析
你之前的错误根源在于:df_old中的元素是字典对象,不是字符串,直接调用re.sub会因为参数类型不匹配报错;而将整个列表转为字符串后遍历,实际是在逐个处理字符,自然得不到预期结果。
正确处理步骤
我们需要针对每个字典元素提取值、清理后缀,再转换为目标格式:
- 定义处理单个字典的函数
import re import pandas as pd def clean_jobs(job_dict): # 提取字典所有值,去掉末尾的" Job" cleaned = [re.sub(r'\sJob$', '', val) for val in job_dict.values()] # 转换为集合格式的字符串 return str(set(cleaned))
- 应用到DataFrame列上
假设你的原始数据在DataFrame的JOBS列中,直接用apply批量处理:
df['新JOBS列'] = df['JOBS列'].apply(clean_jobs)
测试示例
# 模拟你的原始数据 data = { 'JOBS列': [ {"/j/03k50": "Waitress Job", "/j/055qm": "Programmer Job", "/j/02h40lc": "Marketing Job"}, {"/j/03k50": "Waitress Job", "/j/055qm": "Programmer Job", "/j/02h40lc": "Marketing Job"}, {"/j/055qm": "Programmer Job", "/j/02h40lc": "Marketing Job"} ] } df = pd.DataFrame(data) # 执行处理 df['新JOBS列'] = df['JOBS列'].apply(clean_jobs) # 输出结果 print(df['新JOBS列'])
输出结果:
0 {'Waitress', 'Programmer', 'Marketing'} 1 {'Waitress', 'Programmer', 'Marketing'} 2 {'Programmer', 'Marketing'} Name: 新JOBS列, dtype: object
补充说明
- 如果需要保留职业的原始顺序(集合是无序的),可以把
str(set(cleaned))改成str(cleaned),得到类似["Waitress", "Programmer", "Marketing"]的格式。 - 正则
r'\sJob$'精准匹配末尾的空格加"Job",避免误删其他包含"Job"的内容。
内容的提问来源于stack exchange,提问作者anacondah88
相关产品推荐
相关产品推荐

