我正试图过滤tweet文本中的所有#关键字。我使用str.extractall()来提取所有带有#关键字的关键字。
这是我第一次使用pandas从tweetText中过滤关键字。输入、代码、预期输出和错误如下所示。
输入:userID,tweetText
01, home #sweet home
01, #happy #life
02, #world peace
03, #all are one
04, world tour
等等。。。总的数据文件是用GB大小的scraped tweets和其他几列组成的。但我只对两个专栏感兴趣。
代码:import re
import pandas as pd
data = pd.read_csv('Text.csv', index_col=0, header=None, names=['userID', 'tweetText'])
fout = data['tweetText'].str.extractall('#')
print fout
预期产量:userID,tweetText
01,#sweet
01,#happy
01,#life
02,#world
03,#all
错误:Traceback (most recent call last):
File "keyword_split.py", line 7, in
fout = data['tweetText'].str.extractall('#')
File "/usr/local/lib/python2.7/dist-packages/pandas/core/strings.py", line 1621, in extractall
return str_extractall(self._orig, pat, flags=flags)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/strings.py", line 694, in str_extractall
raise ValueError("pattern contains no capture groups")
ValueError: pattern contains no capture groups
提前谢谢你的帮助。根据用户id筛选关键字的最简单方法应该是什么?
输出更新:
当仅使用此选项时,输出如下
s.name = "tweetText"
data_1 = data[~data['tweetText'].isnull()]
本例中的输出是空的[],用户id仍在列表中,对于那些具有关键字的用户,有一个关键字数组而不是列表形式。
当仅使用此选项时,输出我们所需的内容,但使用NANs.name = "tweetText"
data_2 = data_1.drop('tweetText', axis=1).join(s)
这里的输出是正确的格式,但是那些没有关键字的输出还没有考虑并且没有。
如果有可能的话,我们可以忽略这些用户ID,完全不显示在输出中。在接下来的阶段中,我试图计算关键字的频率,其中NAN或空的[]也将被计算在内,并且该频率可能会损害将来的分类。
原文链接:https://blog.csdn.net/weixin_39861669/article/details/111453221