【发布时间】:2020-05-16 06:29:58
【问题描述】:
我有一个如下的数据框:
data = {'speaker':['Adam','Ben','Clair'],
'speech': ['Thank you very much and good afternoon.',
'Let me clarify that because I want to make sure we have got everything right',
'By now you should have some good rest']}
df = pd.DataFrame(data)
我想计算语音列中的单词数,但只计算预定义列表中的单词。例如,列表是:
wordlist = ['much', 'good','right']
我想生成一个新列,显示这三个词在每一行中出现的频率。因此,我的预期输出是:
speaker speech words
0 Adam Thank you very much and good afternoon. 2
1 Ben Let me clarify that because I want to make sur... 1
2 Clair By now you should have received a copy of our ... 1
我试过了:
df['total'] = 0
for word in df['speech'].str.split():
if word in wordlist:
df['total'] += 1
但我运行它后,total 列始终为零。我想知道我的代码有什么问题?
【问题讨论】:
-
要了解您的代码有什么问题,您可以从打印循环中的每个单词开始。你会看到你的 word 实际上是一个字符串列表,而不是一个字符串。另外,当你做df['total'] += 1时,你给df.total列的每个元素加1,这不是你想要达到的。
-
@AnnaK。感谢您的解释。我现在确实看到单词是单词列表,而不是单个单词(但我对为什么 jupytyer 在运行“if word in wordlist”时不显示错误感到困惑)。想知道要不要写正确(就是word是单个词),应该怎么写呢?
-
我喜欢@CDBJ 的回答。您应该尽可能避免在数据帧行上循环。
-
我理解您的意思,并且以后一定会牢记这一点。但只是出于好奇,如果
string.split不起作用,我怎么能得到每行的单个单词?我一直在寻找它,但没有找到一个好的答案......
标签: python string pandas dataframe nlp