如何将函数(BigramCollocationFinder)应用于Pandas DataFrame

时间:2015-12-30 14:53:17

标签: python numpy pandas machine-learning nltk

我不习惯编程,需要一些帮助才能解决问题。 我有一个包含4列和大约5k行的.csv,里面有问题和答案。 我想在每个单元格中找到单词搭配。

起点:Pandas数据帧有4列,大约5k行。 (Id,Title,Body,Body2)

目标:包含7列的数据框(Id,Title,Title-Collocations,Body,Body_Collocations,Body2,Body2-Collocations)并在其每一行上应用一个函数。

我在NLTK文档中找到了Bigramm搭配的示例。

const MyComponent = props => <span>{ i18n.get( 'title' ) }</span>

我想将此功能改编为我的Pandas Dataframe。我知道Pandas Dataframes的apply函数,但无法让它工作。

这是我对其中一列的测试方法:

bigram_measures = nltk.collocations.BigramAssocMeasures()
finder.apply_freq_filter(3)
finder = BigramCollocationFinder.from_words(nltk.corpus.genesis.words('english-web.txt'))
print (finder.nbest(bigram_measures.pmi, 5))
>>>[('Beer', 'Lahai'), ('Lahai', 'Roi'), ('gray', 'hairs'), ('Most', 'High'), ('ewe', 'lambs')]

但如果我打印出一个示例行,我得到

df['Body-Collocation'] = df.apply(lambda df: BigramCollocationFinder.from_words(df['Body']),axis=1)

我甚至不确定这是否正确。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

如果您想将BigramCollocationFinder.from_words()应用于value`列中的每个Body,则必须执行以下操作:

df['Body-Collocation'] = df.Body.apply(lambda x: BigramCollocationFinder.from_words(x))

从本质上讲,apply允许您遍历rows并向应用的函数提供value Body的相应column

但正如评论中所建议的,提供数据样本可以更容易地解决您的具体案例。

答案 1 :(得分:1)

谢谢,答案。我想我问的问题并不完美。但是你的回答仍然帮助我找到了解决方案。有时候休息一下很好: - )

如果有人对答案感兴趣。这对我有用。

df['Body-Collocation'] = df.apply(lambda df: BigramCollocationFinder.from_words(df['Question-Tok']),axis=1)
df['Body-Collocation'] = df['Body-Collocation'].apply(lambda df: df.nbest(bigram_measures.pmi, 3))