python - 使用 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
我将使用类似的结构为几个不同类别的相当长的术语列表构建引理、定义和上位词矩阵,因此可扩展的解决方案将是理想的。
在此先感谢您的时间。
解决方案
通过将 .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
推荐阅读
- c# - 根据时区在一天中的特定时间安排hangfire作业
- r - 在闪亮的应用程序中更改标签内的字体
- c# - 是否可以在低于 6 的 EF 版本中拦截来自 EF 的数据库查询?
- angular - 将 environment.ts 传递给 Angular 库模块
- r - R中一张图表上的多条线
- c# - 使用 AutoMapper 将 ef 模型映射到 dto,DateTime 数据类型引发异常
- vue.js - 如何在 v-for 循环中调用模态组件?
- mysql - mysql在状态A,B和状态C中选择没有卡的用户
- c++ - 如何通过输入十进制数字打印 UTF-8 符号?
- amazon-cloudformation - 从 CloudFormation 中的现有队列 ARN 获取 SQS 队列名称