如何去除DataFrame单行内的重复Token?
问题
我有一个用于情感分析的DataFrame,stemmed列包含分词后的token列表,原始数据如下:
| stemmed |
|---|
| ['min', 'tol', 'cilegon', 'serang', 'minim', 'lampu', 'terang', 'jalan', 'bayar', 'tol', 'mahal', 'emang', 'bayar', 'tol', 'doang', 'tah', 'tidak', 'plus', 'terang', 'jalan', 'tidak', 'lubang'] |
| ['moga', 'selesai', 'guna', 'jalan', 'tol', 'nyaman', 'lancar', 'jalan'] |
需要移除每行列表中的重复token,处理后目标结果如下:
| stemmed |
|---|
| ['min', 'tol', 'cilegon', 'serang', 'minim', 'lampu', 'terang', 'jalan', 'bayar', 'mahal', 'emang', 'doang', 'tah', 'tidak', 'plus', 'lubang'] |
| ['moga', 'selesai', 'guna', 'jalan', 'tol', 'nyaman', 'lancar'] |
解决方案
使用pandas结合自定义去重函数,既能移除重复token,又能保留元素首次出现的顺序:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'stemmed': [ ['min', 'tol', 'cilegon', 'serang', 'minim', 'lampu', 'terang', 'jalan', 'bayar', 'tol', 'mahal', 'emang', 'bayar', 'tol', 'doang', 'tah', 'tidak', 'plus', 'terang', 'jalan', 'tidak', 'lubang'], ['moga', 'selesai', 'guna', 'jalan', 'tol', 'nyaman', 'lancar', 'jalan'] ] }) # 自定义去重函数,维持元素顺序 def dedupe_tokens(tokens): seen = set() result = [] for token in tokens: if token not in seen: seen.add(token) result.append(token) return result # 应用到stemmed列 df['stemmed'] = df['stemmed'].apply(dedupe_tokens) # 输出结果 print(df)
说明
- 自定义函数
dedupe_tokens通过集合seen追踪已出现的token,遍历列表时仅保留首次出现的元素,确保原顺序不变。 - 使用
apply()方法将函数批量作用于stemmed列的每一行数据。
运行代码后,即可得到目标中的去重结果。
内容的提问来源于stack exchange,提问作者Fathina Atsila
相关产品推荐
相关产品推荐

