You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas中将字典应用于含numpy数组的列并返回唯一值

你原来的代码存在3个核心问题:

  1. 原始UNIGRAMA列的numpy数组里的单词存在前导空格(比如' filhar'),无法和字典里的无空格key匹配,导致替换失效
  2. 不需要开启regex=True,你的需求是精确匹配完整单词替换,开启正则可能触发非预期的子串替换
  3. 聚合时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 08:18:03