pandas 绘制非数值类型饼图
Excel 能够画饼图,但是限于本列数据为数值类型,对于非数值类型 (non-numeric type) 则无能无力,pandas 作为 excel 的代码版本,当然没有这个限制~
对于数值类型的列,可以直接用下面一行代码完成饼图:
1 | df.plot.pie(y='col_name', figsize=(8, 6)) |
如果 col_name
是非数值列,代码会报以下错误:
1 | TypeError: '<' not supported between instances of 'str' and 'int' |
下面这个是 Matplotlib 画饼图的 MVP
1 | import pandas as pd |
需要用胶水将 pandas 的指定列和这个函数关联起来,胶水之一是 value_counts
,它可以对一列数据的值做字典统计,另外就是unique()
,可以列举出某列的所有非重复值,这两份胶水分别对应这个函数的 values
和 labels
参数~
1 | pie_plot(df['source'].value_counts().values, df['source'].unique(), '发布机型') |
但是还有一个隐藏的问题是,value_counts
不会统计 nan
,但是 unique
会统计 nan
,如果不去除 nan
会造成 value_counts().values
和 unique
长度不一样~
1 | # 去除 nan 等空值 |
最后还有一个优化的点,为了保证图例标签的连续性,可以先给该列排个序~
1 | # 去除 nan 等空值 |
笔者已经把这个小逻辑做成了一个网页小工具,可以在网页上传 CSV 文件,选择任意列(要求该列的值不超过 50 类,可多选)画饼图,可选 AntV、Echarts、Matplotlib 三种画图引擎,网页地址如下:
欢迎尝试~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BuyiXiao's Blog!
评论
ValineDisqus