如何从含推文的DataFrame中统计话题标签并生成新DataFrame
统计DataFrame中提取的话题标签出现次数
看起来你已经搞定了话题标签的提取,接下来要统计每个标签的出现次数对吧?这里有两个简单可靠的方法,帮你把统计结果存入新的DataFrame:
首先先确认你的现有代码是没问题的(我把它完整写出来方便参考):
import pandas as pd import re tweets = pd.Series(['This is a tweet example #help #thankyou', 'Second tweet example #help', 'Third tweet example #help #stackoverflow']) tweets_df = pd.DataFrame({'Tweets': tweets}) # 提取话题标签到新列 tweets_df['hashtags'] = tweets_df['Tweets'].apply(lambda twt : re.findall(r"#(\w+)", twt))
方法1:用explode + value_counts(最直观推荐)
pandas的explode方法可以把包含列表的列拆成每行一个元素,之后直接用value_counts统计次数,再转成DataFrame就好:
# 拆分hashtags列的列表,每行保留一个标签 exploded_tags = tweets_df['hashtags'].explode() # 统计每个标签的出现次数,转为DataFrame并重置索引 hashtag_counts = exploded_tags.value_counts().reset_index() # 重命名列名让结果更清晰 hashtag_counts.columns = ['hashtag', 'count']
执行后hashtag_counts的结果如下:
| hashtag | count |
|---|---|
| help | 3 |
| thankyou | 1 |
| stackoverflow | 1 |
方法2:用itertools.chain兼容旧版pandas
如果你的pandas版本低于0.25(explode是0.25版本新增的),可以用itertools.chain来展开所有标签列表,再统计:
from itertools import chain # 把所有标签从列表中提取出来,变成一维列表 all_tags = list(chain.from_iterable(tweets_df['hashtags'])) # 统计次数并转为结构化的DataFrame hashtag_counts = pd.Series(all_tags).value_counts().reset_index() hashtag_counts.columns = ['hashtag', 'count']
这个方法和方法1的结果完全一致,适合环境受限的情况。
两种方法都能快速得到你需要的统计DataFrame,后续你可以直接用这个结果做分析或者可视化~
内容的提问来源于stack exchange,提问作者Camilow
相关产品推荐
相关产品推荐

