【问题标题】:How to match tokens with a dictionary key and get corresponding value如何将令牌与字典键匹配并获取相应的值
【发布时间】:2019-12-20 05:00:27
【问题描述】:

我有一个带有如下标记的数据框,我想与字典的键匹配并获取相应的键和值。

数据框:

    A                     B
    1          ['i','like','apples', 'banana' ,'lot','however','do','not','eat','them','but' , 'sandwich'  , 'also' , 'good']
    2          ['avengers','series','something','like','most','annabelle','movies' , 'cannot' ,'watch' , 'night' , 'time']
    3          ['virat kohli','batsmen','world','like','most','federer','nadal' ,'tennis']

我有一本像下面这样的字典:

 key          value
apple         fruit
banana        fruit
grapes        fruit
sandwich      junkfood
noodles       junkfood
avengers      action
deadpool      action
annabelle     horror
virat kohli   cricket
federer       tennis
nadal         tennis
timo ball     table tennis

我想将一行的所有标记与字典的键匹配,并得到匹配的键和值,如下所示。

输出:

A              B                                     C
1       [fruit , junk food]           ['apple' , 'banana' , 'sandwich']
2       ['action' , 'horror']         ['avengers' , 'annabelle']
3       ['cricket' , 'tennis']        ['virat kohli' ,'nadal' , 'federer']

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我尝试将字符串与字典进行匹配,但出现值错误并且由于我是编程新手而无法解决它们
  • 希望您能提供有助于我自己学习的解决方案
  • 向我们展示一些您尝试过的代码。

标签: python dictionary nlp text-mining topic-modeling


【解决方案1】:

您可以将pandas.DataFrame.apply 与列表理解一起使用,

#if 'df' is  your data frame  & 'dct_' is your dictionary
df['C'] = df['B'].apply(lambda lst: [item for item in lst if item in dct_.keys()])
df['D'] = df['B'].apply(lambda lst: [dct_.get(item) for item in lst if item in dct_.keys()])

  A              B                                        C                          D
0  1  [i, like, apples, banana,...]               [ banana, sandwich]          [fruit, junkfood]
1  2  [avengers, series, something,...]         [avengers, annabelle]           [action, horror]    
2  3  [virat kohli, batsmen,...]        [virat kohli, federer, nadal]  [cricket, tennis, tennis]

【讨论】:

  • 感谢您的回复 shijith ,上面的代码工作得很好,但是我对 D 列有点担心,我不想像第三行那样重复,网球显示多次。有吗任何可能从中删除重复项
  • 使用set() 只获取唯一值,如果你想返回一个列表使用list(set())i.e. lambda lst: set([dct_.get(item) for item in lst if item in dct_.keys()])
  • 我试过了,但我面临 Typerror:unhashable type : numpy.ndarray 注释中的上述代码行
  • 使用list(set()) 代替lambda lst: list(set([dct_.get(item) for item in lst if item in dct_.keys()]))
  • 当我使用上面的代码行时,错误仍然存​​在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
  • 2021-08-04
  • 2020-09-25
相关资源
最近更新 更多