首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据帧中的列传递到NLTK python中的wordnet.synsets()中

如何将数据帧中的列传递到NLTK python中的wordnet.synsets()中
EN

Stack Overflow用户
提问于 2014-06-10 01:48:31
回答 1查看 952关注 0票数 0

我有一个数据框,其中一个列包含英文单词。我希望通过NLTKs synsets()函数传递该列中的每个元素。我的问题是synsets()一次只接受一个单词。

例如wordnet.synsets(‘父亲’)

现在,如果我有这样的数据帧:

代码语言:javascript
运行
复制
dc = {'A':[0,9,4,5],'B':['father','mother','kid','sister']}
df = pd.DataFrame(dc)
df
   A       B
0  0  father
1  9  mother
2  4     kid
3  5  sister

我希望通过synsets()函数传递B列,并让另一列包含它的输出。我希望在不遍历数据帧的情况下完成此操作。

我该怎么做?

EN

Stack Overflow用户

发布于 2014-06-10 01:54:49

您可以使用apply方法:

代码语言:javascript
运行
复制
In [4]: df['C'] = df['B'].apply(wordnet.synsets)

In [5]: df
Out[5]: 
   A       B                                                  C
0  0  father  [Synset('father.n.01'), Synset('forefather.n.0...
1  9  mother  [Synset('mother.n.01'), Synset('mother.n.02'),...
2  4     kid  [Synset('child.n.01'), Synset('kid.n.02'), Syn...
3  5  sister  [Synset('sister.n.01'), Synset('sister.n.02'),...

然而,拥有一列列表通常不是一个非常有用的数据结构。将每个同义词放在各自的列中可能会更好。您可以通过使回调函数返回一个pd.Series来完成此操作

代码语言:javascript
运行
复制
In [29]: df.join(df['B'].apply(lambda word: pd.Series([w.name for w in wordnet.synsets(word)])))
Out[29]: 
   A       B            0                1            2                   3  \
0  0  father  father.n.01  forefather.n.01  father.n.03  church_father.n.01   
1  9  mother  mother.n.01      mother.n.02  mother.n.03         mother.n.04   
2  4     kid   child.n.01         kid.n.02     kyd.n.01          child.n.02   
3  5  sister  sister.n.01      sister.n.02  sister.n.03           baby.n.05   

             4                     5             6         7           8  
0  father.n.05           father.n.06  founder.n.02  don.n.03  beget.v.01  
1  mother.n.05           mother.v.01    beget.v.01       NaN         NaN  
2     kid.n.05  pull_the_leg_of.v.01      kid.v.02       NaN         NaN  
3          NaN                   NaN           NaN       NaN         NaN  

(我选择只显示每个Synsetname属性;您当然可以使用

代码语言:javascript
运行
复制
df.join(df['B'].apply(lambda word: pd.Series(wordnet.synsets(word))))

如果您想要Synset对象本身。)

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24125862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档