删除CSV中不匹配技能列表时触发TypeError问题求助
问题解决:TypeError: argument of type 'NoneType' is not iterable
错误根源
list.extend()是原地修改列表的方法,它不会返回新列表,而是返回None。你把stop.extend(new_stopwords)的结果赋值给new_stop,导致new_stop变成了None,后续判断x in new_stop时,自然触发"NoneType不可迭代"的错误。
修复方案
方案1:保留原stop列表,创建新的扩展列表
skills_csv = pd.read_csv("Skills.csv") new_stopwords = skills_csv["Skills"].tolist() # 复制原stop列表,再扩展新技能 new_stop = stop.copy() new_stop.extend(new_stopwords) # 过滤skills_list中不在允许列表里的内容 df_result["skills_list"] = df_result["skills_list"].apply(lambda x: " ".join(x for x in x.split() if x in new_stop)) df_result
方案2:直接修改原stop列表(无需赋值)
如果不需要保留原stop的内容,可以直接扩展原列表,不用接收返回值:
skills_csv = pd.read_csv("Skills.csv") new_stopwords = skills_csv["Skills"].tolist() # 直接扩展原stop列表,不用接收返回值 stop.extend(new_stopwords) # 过滤skills_list中不在允许列表里的内容 df_result["skills_list"] = df_result["skills_list"].apply(lambda x: " ".join(x for x in x.split() if x in stop)) df_result
优化建议
如果技能数量较多,建议把技能列表转成集合,因为in操作在集合中的查询效率远高于列表:
# 转成集合 new_stop_set = set(new_stop) # 对应方案1;方案2用set(stop) df_result["skills_list"] = df_result["skills_list"].apply(lambda x: " ".join(x for x in x.split() if x in new_stop_set))
内容的提问来源于stack exchange,提问作者Hossam Ali
相关产品推荐
相关产品推荐

