本节目标:掌握pandas作为统计工具的操作
本节内容:掌握截取和筛选,以及更进一步的统计函数,方法等 本节技术点:pandas,groupby,统计操作
本节阅读需要(20)min。 本节实操需要(20)min。
五星级推荐pandas可视化教学网站。 pandas tutor 建议使用jupter进行操作。
- pandas(4)统计计算
- 前言
- 一、基础的统计操作
- 排序
- mean均值
- 其他
- 二、筛选filter
- 三、分组groupby
- 串联groupby
- 分组统计
- 聚类agg
- 总结
pandas和numpy一样不只是提供了基础的数据结构。 pandas的数据结构见前两节。 其中讲列操作的时候提到了初步的统计操作。
我们会结合动态呈现的网站理解统计的逻辑。
一、基础的统计操作 排序import pandas as pd
import io
csv = '''
breed,type,longevity,size
Labrador,sporting,12.04,medium
German,herding,9.73,large
Beagle,hound,12.3,small
Golden,sporting,12.04,medium
Yorkshire,toy,12.6,small
Bulldog,non-sporting,6.29,medium
Boxer,working,8.81,medium
Poodle,non-sporting,11.95,medium
'''
dogs = pd.read_csv(io.StringIO(csv)) # io.StringIO可变字符串
dogs = dogs[['breed', 'size']] # 列筛选器,产生新的df
dogs.sort_values('size', ascending=False)
这样就实现的从小到大的排序。字符串根据ascll码进行逐位排序。
但是有的时候我们如何根据字符串的长度进行排序呢? 这个业务我们也经常遇到!!!
my_index = df["Codon"].str.len().sort_values().index #索引对象
df1 = df.reindex(my_index)
我们需要先得到一个临时的统计长度的列然后排序,再得到排序的index 通过reindex重新构建一个新的排序好的df。 注意原来的df还是没有排序的。
多列排序
df_data_order1 = df.sort_values(by=['C','B'],ascending=[False,True])
一般我们总是生成某个或几个统计标准的列,然后根据这些列进行排序。
mean均值dogs['longevity'].mean() # series
dogs[['longevity']].mean() #dataframe
dogs[['longevity']].mean(1) #按行
dogs[[‘longevity’]].mean(1)语法虽然无问题,但是均值一般是按列,对于特定的属性而言的.行均值很少见,在这里就是dogs[[‘longevity’]]没有变化。
如何按行统计均值呢? 就是dogs.mean(1)多选几个数据行才比较有意义。只选择一列统计行方向的均值是一样的。
其他都是成员方法
print(df.count(),'→ count按列统计非Na值的数量\n')
print(df.min(),'→ min统计最小值\n',df['key2'].max(),'→ max统计最大值\n')
print(df.quantile(q=0.75),'→ quantile统计分位数,参数q确定位置\n')
print(df.sum(),'→ sum求和\n')
print(df.mean(),'→ mean求平均值\n')
print(df.median(),'→ median求算数中位数,50%分位数\n')
print(df.std(),'\n',df.var(),'→ std,var分别求标准差,方差\n')
print(df.skew(),'→ skew样本的偏度\n')
print(df.kurt(),'→ kurt样本的峰度\n')
二、筛选filter
前面讲过了用列名作为筛选器,最常用的也是列名. 但是有的时候我们可能更深入的和df中的具体的值相关. 比如说我们一个班需要得到前十名的成绩等等这样的任务.
import pandas as pd
mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 10, 'b': 20, 'c': 30, 'd': 40},
{'a': 100, 'b': 200, 'c': 300, 'd': 400},
{'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000},
{'a': 10000, 'b': 20000, 'c': 30000, 'd': 40000},
]
df = pd.DataFrame(mydict, index=['one', 'two', 'three', 'four', 'five'])
df.loc[:, df.loc['two'] 12), 'breed']
注意行和列的筛选器也是不一样的。 行:形如(df[‘a’]
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?