Python中将pandas DataFrame列转为列表做NER提取后ID重复如何解决?
问题根源
- 遍历逻辑错误:你只遍历了text列的文本值,没有关联每行对应的id,代码里
append的df.id是整个id列的Series对象,因此每条NER结果里的id都会带上所有行的id,就是你看到的拼接重复问题。 - 语法&命名错误:
df['text'].tolis(()应为df['text'].tolist(),内层循环的变量名tags和外层存储结果的列表重名,会触发变量覆盖,导致逻辑异常。 - 方法拼写错误:pandas没有
DataFrame_from_records这个写法,正确是pd.DataFrame.from_records,也可以直接把结果列表传入pd.DataFrame构造。
修复后的代码
tags = [] # 同时遍历每行对应的id和text内容 for row_id, text in zip(df["id"], df["text"]): tdoc = nlp(text) # 内层循环变量改用ent,避免和外层tags列表重名 for ent in tdoc.ents: tags.append((row_id, ent.text, ent.label_)) # 直接构造DataFrame即可 df_tag = pd.DataFrame(tags, columns = ["id", "name", "type"])
运行上述代码后就能得到id和对应NER结果匹配的预期输出。
内容的提问来源于stack exchange,提问作者RData
相关产品推荐
相关产品推荐

