使用Python在同一步骤中应用操作和除法操作
我试图使用下面的代码来获取文本中名词的比例,但这给了我一个错误。我正在使用一个函数来计算文本中的名词数量,并在另一列中计算出总字数使用Python在同一步骤中应用操作和除法操作,python,pandas,Python,Pandas,我试图使用下面的代码来获取文本中名词的比例,但这给了我一个错误。我正在使用一个函数来计算文本中的名词数量,并在另一列中计算出总字数 pos_family = { 'noun' : ['NN','NNS','NNP','NNPS'] } def check_pos_tag(x, flag): cnt = 0 try: for tag,value in x.items(): if tag in pos_family[flag]:
pos_family = {
'noun' : ['NN','NNS','NNP','NNPS']
}
def check_pos_tag(x, flag):
cnt = 0
try:
for tag,value in x.items():
if tag in pos_family[flag]:
cnt +=value
except:
pass
return cnt
df2['noun_count'] = df2['PoS_Count'].apply(lambda x: check_pos_tag(x, 'noun')/df2['word_count'])
注意:我使用nltk包通过PoS标记获取计数,并且我的数据帧中PoS_计数列的字典中有计数
如果我在第一次运行时删除“/df2['word_count']”并获取名词计数,然后再次包含它并运行,它工作正常,但如果我第一次运行它,则会出现以下错误
ValueError: Wrong number of items passed 100, placement implies 1
非常感谢您的帮助
提前谢谢 正如您所猜测的,问题出在
/df2['word\u count']
位df2['word\u count']
是一个系列,但是您需要在这里使用浮点或int,因为您要将check\u pos\u标记(x,'名词')
(这是一个int
)除以它
一个可能的解决方案是从序列中提取相应的字段,并在lambda中使用它然而,单独完成每个操作会更容易(也可以说更快)
试试这个:
df2['noun_count'] = df2['PoS_Count'].apply(lambda x: check_pos_tag(x, 'noun')) / df2['word_count']
我们可以看到DF2的一些示例数据吗这里是示例数据单词_countpos_count 0 601{'JJ':65,'NN':117,'VBG':24,'CD':4}1201{'JJ':19,'NN':39,'NNP':6,'VBZ':1}2180{'NN':34,'JJ':15,'RB':5,'VBD':15}我知道如果我分别运行这两个计算,我可以得到期望的结果,但我想检查是否有一种方法可以一步完成。非常感谢。你的解决方案奏效了!