我不习惯编程,需要一些帮助才能解决问题。 我有一个包含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)
我甚至不确定这是否正确。有人能指出我正确的方向吗?
答案 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))