首页 > 解决方案 > 使用 DataFrame.apply() 生成值时返回 Synset('') 包装器

问题描述

当我通过 DataFrame.apply() 传递一个函数时,我得到的值包含在我认为是它们的对象类型中。我现在在两个应用程序中看到了这个错误:一个使用 NLTK 的 Wordnet 库(返回 Synset('value'),另一个使用 Datetime (Datetime('value'))。

我借鉴了许多示例来生成下面的代码,所以我对自己做错了什么感到茫然。

我试过使用这个函数——将同义词应用于熊猫(以及另一个变体)——但由于某种原因,它返回了一个系列(即使我指定它是一个数据框),所以 .applymap() 没有工作。使用 .map() 和简单的 .apply() 的变体也是有问题的。

这是我所拥有的(使用 pandas 和一些 nltk 库):

df_agri_clean['Synsets'] = [x[0] for x in df_agri_clean['Category'].apply(wordnet.synsets)]
df_agri_clean

这是输出:

    Category        Synsets
0   agricultural    Synset('agricultural.a.01')
1   domestic        Synset('domestic.n.01')
2   animal          Synset('animal.n.01')
3   services        Synset('services.n.01')
5   food            Synset('food.n.01')

我想要的输出是:

    Category        Synsets
0   agricultural    agricultural.a.01
1   domestic        domestic.n.01
2   animal          animal.n.01
3   services        services.n.01
5   food            food.n.01

我将使用类似的结构为几个不同类别的相当长的术语列表构建引理、定义和上位词矩阵,因此可扩展的解决方案将是理想的。

在此先感谢您的时间。

标签: pythonpandasnltk

解决方案


通过将 .name() 添加到 x[0] 来解决它。在这里查看 Alvas 的回答。:

df_agri_clean['Synsets'] = [x[0].name() for x in df_agri_clean['Category'].apply(wordnet.synsets)]
print(df_agri_clean['Synsets'])

输出:

    Category        Synsets
0   agricultural    agricultural.a.01
1   domestic        domestic.n.01
2   animal          animal.n.01
3   services        services.n.01
5   food            food.n.01

推荐阅读