使用DataFrame.apply()生成值时返回Synset('')包装器

时间:2018-09-17 14:45:28

标签: python pandas nltk

当我通过DataFrame.apply()传递函数时,我得到的值包装在我假定的对象类型中。我现在已经在两个应用程序中看到了此错误:一个使用NLTK的Wordnet库(返回Synset('value'),另一个使用Datetime(Datetime('value'))。

我已经使用了许多示例来生成下面的代码,所以我对自己做错的事情不知所措。

我尝试使用此功能-Applying synsets to pandas(以及另一个变体)-但由于某种原因,它返回一个Series(即使我指定它是一个数据框),因此.applymap( )不起作用。使用.map()和仅使用.apply()进行变体也存在问题。

这就是我所拥有的(使用熊猫和一些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

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

提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

通过将.name()添加到x [0]来解决该问题。参见Alvas here的回答。:

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