如何用Python对字符串类型数据做分组统计并可视化?
解决方法
1. 正确统计每个type的分组数量
你之前用df.groupby(['type', 'url']).sum()是错误的——按type和url双重分组后,sum()对字符串类型数据无效,才会出现乱码输出。要统计每个type的数量,用以下两种简单方法即可:
方法一:直接用value_counts()
type_counts = df['type'].value_counts() print(type_counts)
这个方法直接返回每个type的出现次数,结果是索引为type取值、值为整数计数的Series,完全符合可视化要求。
方法二:groupby搭配size()
type_counts = df.groupby('type').size() print(type_counts)
size()会统计每个分组的行数(也就是该type的数量),同样返回整数类型的统计结果。
2. 可视化统计结果
拿到整数计数后,直接用matplotlib或pandas自带的绘图功能就能完成可视化,这里给出两种常用方案:
柱状图(Matplotlib)
import matplotlib.pyplot as plt # 可选:设置中文显示,避免乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘制柱状图 type_counts.plot(kind='bar') plt.title('各类型URL数量统计') plt.xlabel('URL类型') plt.ylabel('数量') plt.xticks(rotation=45) # 旋转x轴标签,防止重叠 plt.show()
饼图(Pandas自带绘图)
type_counts.plot(kind='pie', autopct='%1.1f%%') plt.title('各类型URL占比') plt.ylabel('') # 去掉饼图默认的y轴标签,让布局更美观 plt.show()
补充说明
- 你之前试的
len()、.sum()、.count()里,.count()其实可以用在groupby后,但df.groupby('type').count()是统计分组内非空值数量(无缺失值时和size()结果一致),但size()更直接适配你的需求。 .sum()不适合字符串类型数据,它的作用是拼接字符串,不是统计数量,这也是你之前出错的原因之一。
内容的提问来源于stack exchange,提问作者ThereIsAGhostInMyComputer
相关产品推荐
相关产品推荐

