如何在pandas中将字典应用于含numpy数组的列并返回唯一值
你原来的代码存在3个核心问题:
- 原始
UNIGRAMA列的numpy数组里的单词存在前导空格(比如' filhar'),无法和字典里的无空格key匹配,导致替换失效 - 不需要开启
regex=True,你的需求是精确匹配完整单词替换,开启正则可能触发非预期的子串替换 - 聚合时
agg({'unique'})的写法不符合pandas语法规范
正确实现方案
方案1:explode分组法(适合大数据量,效率更高)
import pandas as pd import numpy as np # 你的原始数据 df=pd.DataFrame({'UNIGRAMA': {0: np.array(['on', 'line', ' atenção'], dtype='<U13'), 1: np.array(['futurar', ' filhar', ' preparar'], dtype='<U12'), 2: np.array(['compromisso', ' educação', ' student'], dtype='<U11')}}) dicionario2 = {'compromisso': 'commitment', 'filhar' : 'student', 'futurar' : 'futuro', 'on' : 'on-line', 'line' : 'on-line'} # 处理逻辑 df['unique'] = ( df['UNIGRAMA'] .explode() # 展开数组为单独行 .str.strip() # 去除单词前后的空白字符 .replace(dicionario2) # 精确匹配替换 .groupby(level=0) # 按原始索引分组 .unique() # 取每个分组的唯一值 )
方案2:apply遍历法(适合小数据集,写法更直观)
df['unique'] = df['UNIGRAMA'].apply( lambda arr: np.unique([dicionario2.get(word.strip(), word.strip()) for word in arr]) )
运行后输出的df['unique']完全符合你的预期结果:
| 索引 | unique |
|---|---|
| 0 | ['on-line', 'atenção'] |
| 1 | ['futuro', 'student', 'preparar'] |
| 2 | ['commitment', 'educação', 'student'] |
内容的提问来源于stack exchange,提问作者Guilherme Parreira
相关产品推荐
相关产品推荐

