如何为DataFrame所有列的取值计数生成堆叠条形图
处理DataFrame并生成堆叠条形图方案
步骤1:统计各列取值出现次数
提供两种高效统计方式,根据习惯选择:
- 方法一:直接批量统计每列并转置结果
import pandas as pd # 假设你的DataFrame名为df count_df = df.apply(pd.Series.value_counts).fillna(0).astype(int)
得到的count_df会以yes/no/na/not specified为行索引,原DataFrame的列为列名,每个单元格对应取值的出现次数。
- 方法二:重塑数据后分组统计
melted_df = df.melt(var_name='列名', value_name='取值') count_df = melted_df.groupby(['列名', '取值']).size().unstack(fill_value=0)
这种方式更直观,后续可视化时可直接复用中间数据。
步骤2:生成堆叠条形图
用Matplotlib实现
import matplotlib.pyplot as plt # 设置绘图风格 plt.style.use('seaborn-v0_8') # 绘制堆叠条形图 count_df.plot(kind='bar', stacked=True, figsize=(12, 6)) # 完善图表元素 plt.title('各列取值分布堆叠条形图') plt.xlabel('DataFrame列名') plt.ylabel('出现次数') plt.legend(title='取值类型', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() # 显示或保存图表 plt.show() # plt.savefig('stacked_bar_plot.png')
用Seaborn实现
import seaborn as sns plt.figure(figsize=(12, 6)) sns.barplot(data=melted_df, x='列名', hue='取值', estimator=len, errorbar=None) plt.title('各列取值分布堆叠条形图') plt.xlabel('DataFrame列名') plt.ylabel('出现次数') plt.legend(title='取值类型', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
关键注意事项
- 如果DataFrame中的
na是pandas缺失值(NaN),先统一转为字符串:df = df.fillna('na') - 列名过多导致x轴标签重叠时,添加
plt.xticks(rotation=45)旋转标签角度
内容的提问来源于stack exchange,提问作者Mirabror Sodikov
相关产品推荐
相关产品推荐

