导包
import pandas as pd import matplotlib.pyplot as plt
读取数据
path = r'C:UsersAdministratorDesktop42numbers.xls'
查看数据
data
这里选择 某一列 的时间进行,进行汇总统计
统计出 不同 年份 不同月份 的数量
然后 绘制 柱状图/饼图
首先 以 年月 进行 汇总 统计
df = data
data_new = df.groupby([df["sell_date"].dt.year, df["sell_date"].dt.month]).count()
小tips:
pd.groupby( by=None, axis=0, # 恒坐标还是纵坐标,默认位 index横坐标 level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)
举例子:
df = pd.Dataframe({'Animal': ['Falcon', 'Falcon', 'Parrot', 'Parrot'], 'Max Speed': [380., 370., 24., 26.]})
df
Animal Max Speed
0 Falcon 380.0
1 Falcon 370.0
2 Parrot 24.0
3 Parrot 26.0
df.groupby(['Animal']).mean() Max Speed
Animal
Falcon 375.0
Parrot 25.0
默认是根据index即行进行分组
arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'], ['Captive', 'Wild', 'Captive', 'Wild']] index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type')) df = pd.Dataframe({'Max Speed': [390., 350., 30., 20.]}, index=index)
df 这里level 就是根据index进行分类, 这个数据共有外内两个索引 index, 外Animal 内 Type
Max Speed
Animal Type
Falcon Captive 390.0
Wild 350.0
Parrot Captive 30.0
Wild 20.0
外索引, level = 0
df.groupby(level=0).mean()
Max Speed Animal Falcon 370.0 Parrot 25.0 内索引 level = '内索引的名字' 就是说 通过 数字 or 名字, 两者 都可以 对数据进行分组.
df.groupby(level=“Type”).mean()
Max Speed Type Captive 210.0 Wild 185.0
l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] df = pd.Dataframe(l, columns=["a", "b", "c"])
df
a b c 1 2 3 1 None 4 1 2 2
根据 b 列进行分组
df.groupby(by=["b"]).sum()
a c
b
1.0 2 3
2.0 2 5
默认会去掉 Nan的那一组, 当然也可以将这一列分组显示出来
df.groupby(by=["b"], dropna=False).sum()
a c
b
1.0 2 3
2.0 2 5
NaN 1 4
返回 例子
这里是根据 年 月 的,进行统计数的分组
data_new = df.groupby([df["sell_date"].dt.year, df["sell_date"].dt.month]).count()
这里选择对 sell_date进行柱状图的统计
data['sell_date'] = data['sell_date'].astype("datetime64") # 首先将这列转为 时间格式 df = data[['sell_date']] # df 存储这列 df.groupby([df["sell_date"].dt.year, df["sell_date"].dt.month]).count().plot(kind="bar") # 分组计数绘制 柱状图 plt.yticks([1,2,3,4,5,6]) # 设置 y轴的每一列的数 plt.xticks(rotation=45) # 设置x轴 下面字体 旋转45度 plt.xlabel('sell_date') # 设置 x轴 名字 plt.grid() # 背景增加网格
设置饼图的数据
pie = [] for i in data_new['month_count']: pie.append(i)
设置饼图每个数据的对应标签名
label=[] for a in data_new.index: a = str(a[0])+'年'+str(a[1])+'月' label.append(a)
饼图参数
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, hold=None) x:饼状图的块数,及每块的值 explode:对应的块偏离圆心的比例 labels:每块表示的内容 colors:也是数组,表示每块内容的颜色,设置为None则系统自动分配颜色 autopct:表示显示每块所占的比例 pctdistance=0.8:百分比距中心的距离比例 shadow=True:是否有阴影效果 labeldistance:表示每块对应内容文字距离中心点是饼图半径的倍数 startangle=90 起始绘制角度,并且是逆时针绘制 radius:饼状图的半径,默认是1 hold:是否覆盖其他图形,如果在一个figure中绘制,选择True会覆盖,False会共存
plt.rcParams['font.sans-serif']=['Simhei'] # 保证饼图可以显示中文 plt.figure(figsize=(20,20)) # 设置画布的大小 patches,l_text,p_text = plt.pie(pie, labels=label, autopct='%1.1f%%', startangle=0, shadow=False, pctdistance=0.8) plt.legend(loc="upper right",fontsize=15,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3) # 设置饼图字体大小 for t in l_text: t.set_size(15) for t in p_text: t.set_size(20) # 保存饼图 # plt.savefig("C:\饼图02.png",dpi=200,bbox_inches='tight')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)