Python处理DataFrame列重复字符串(保留长文本)的代码错误排查
问题排查与修复
现有代码的错误点
- 变量名拼写错误:else分支中使用
st.append(candidate),但你定义的结果列表变量名为lst,所有新增条目都存入了不存在的变量,直接导致最终结果缺失元素。 - 遍历过程中修改列表:在
for existing in lst的循环里同步执行remove/append操作,会打乱列表的遍历索引,导致元素漏判、逻辑异常。 - 未预处理拆分后的字符串:从运行输出可以看到,拆分后的候选值携带了多余的方括号、引号、前后空格,比如第一个候选为
"['university of washington bachelor of science'",第二个候选为" 'university of washington'",冗余符号导致字符串包含判断完全失效,本来存在包含关系的字符串被判定为无关。 - 单次比对即执行操作:每和一个已有元素比对就执行添加/删除,无法覆盖所有已有元素的判断场景,还会出现重复添加的问题。
修复方案
推荐改用更稳妥的判断逻辑:先清理所有候选字符串的冗余符号,再逐个判断每个候选是否被其他候选包含,仅保留不被任何其他候选包含的条目,实现代码如下:
def filter_unique_str(raw_str): # 拆分后清理每个元素的多余括号、引号、前后空格 candidates = [item.strip(" []'\"") for item in raw_str.split(',')] result = [] for cur in candidates: need_keep = True for other in candidates: if cur == other: continue # 当前字符串被其他字符串包含,直接丢弃 if cur in other: need_keep = False break if need_keep: result.append(cur) return result # 批量处理DataFrame的UNIVERSITY列 df['cleaned_university'] = df['UNIVERSITY'].apply(filter_unique_str)
拿你的示例测试,处理后得到的结果为['university of washington bachelor of science', 'information school undergraduate researcher'],符合预期。
内容的提问来源于stack exchange,提问作者Teddy 547
相关产品推荐
相关产品推荐

