基于Python数据分析之pandas统计分析


Posted in Python onMarch 03, 2020

pandas模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等,我们来具体看看这些函数:

1、随机生成三组数据

import numpy as np
import pandas as pd

np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)

2、统计分析用到的函数

d1.count()  #非空元素计算
d1.min()  #最小值
d1.max()  #最大值
d1.idxmin()  #最小值的位置,类似于R中的which.min函数
d1.idxmax()  #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1) #10%分位数
d1.sum()  #求和
d1.mean()  #均值
d1.median()  #中位数
d1.mode()  #众数
d1.var()  #方差
d1.std()  #标准差
d1.mad()  #平均绝对偏差
d1.skew()  #偏度
d1.kurt()  #峰度
d1.describe() #一次性输出多个描述性统计指标

必须注意的是,descirbe方法只能针对序列或数据框,一维数组是没有这个方法的
自定义一个函数,将这些统计指标汇总在一起:

def status(x) : 
 return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),
   x.quantile(.75),x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),
   x.std(),x.skew(),x.kurt()],index=['总数','最小值','最小值位置','25%分位数',
   '中位数','75%分位数','均值','最大值','最大值位数','平均绝对偏差','方差','标准差','偏度','峰度'])

执行该函数,查看一下d1数据集的这些统计函数值:

df = pd.DataFrame(status(d1))
df

结果:

基于Python数据分析之pandas统计分析

在实际的工作中,我们可能需要处理的是一系列的数值型数据框,如何将这个函数应用到数据框中的每一列呢?可以使用apply函数,这个非常类似于R中的apply的应用方法。
将之前创建的d1,d2,d3数据构建数据框:

df = pd.DataFrame(np.array([d1,d2,d3]).T, columns=['x1','x2','x3'])
df.head()

df.apply(status)

结果:

基于Python数据分析之pandas统计分析

3、加载CSV数据

import numpy as np
import pandas as pd

bank = pd.read_csv("D://bank/bank-additional-train.csv")
bank.head() #查看前5行

基于Python数据分析之pandas统计分析

描述性统计1:describe()

result = bank['age'].describe()
pd.DataFrame(result ) #格式化成DataFrame

基于Python数据分析之pandas统计分析

描述性统计2:describe(include=[‘number'])

include中填写的是数据类型,若想查看所有数据的统计数据,则可填写object,即include=['object'];若想查看float类型的数据,则为include=['float']。

result = bank.describe(include=['object'])

基于Python数据分析之pandas统计分析

含义:

count:指定字段的非空总数。
unique:该字段中保存的值类型数量,比如性别列保存了男、女两种值,则unique值则为2。
top:数量最多的值。
freq:数量最多的值的总数。
bank.describe(include=['number'])

基于Python数据分析之pandas统计分析

连续变量的相关系数(corr)

bank.corr()

基于Python数据分析之pandas统计分析

协方差矩阵(cov)

bank.cov()

基于Python数据分析之pandas统计分析

删除列

bank.drop('job', axis=1) #删除年龄列,axis=1必不可少

排序

bank.sort_values(by=['job','age']) #根据工作、年龄升序排序
bank.sort_values(by=['job','age'], ascending=False) #根据工作、年龄降序排序

多表连接

准备数据:

import numpy as np
import pandas as pd

student = {'Name':['Bob','Alice','Carol','Henry','Judy','Robert','William'],
  'Age':[12,16,13,11,14,15,24],
  'Sex':['M','F','M','M','F','M','F']}

score = {'Name':['Bob','Alice','Carol','Henry','William'],
  'Score':[75,35,87,86,57]}

df_student = pd.DataFrame(student)
df_student

df_score = pd.DataFrame(score)
df_score

student:

基于Python数据分析之pandas统计分析

score:

基于Python数据分析之pandas统计分析

内连接

stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1

注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。

基于Python数据分析之pandas统计分析

左连接

stu_score2 = pd.merge(df_student, df_score, on='Name',how='left')
stu_score2

基于Python数据分析之pandas统计分析

左连接中,没有Score的学生Score为NaN

缺失值处理

现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法、填补法和插值法。

删除法

当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。

替补法

对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。

插补法

插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。

此处测试使用上面学生成绩数据进行处理

查询某一字段数据为空的数量

sum(pd.isnull(stu_score2['Score']))
结果:2

直接删除缺失值

stu_score2.dropna()

删除前:

基于Python数据分析之pandas统计分析

删除后:

基于Python数据分析之pandas统计分析

默认情况下,dropna会删除任何含有缺失值的行

删除所有行为缺失值的数据

import numpy as np
import pandas as pd

df = pd.DataFrame([[1,2,3],[3,4,np.nan],
   [12,23,43],[55,np.nan,10],
   [np.nan,np.nan,np.nan],[np.nan,1,2]],
   columns=['a1','a2','a3'])

基于Python数据分析之pandas统计分析

df.dropna() #该操作会删除所有有缺失值的行数据

基于Python数据分析之pandas统计分析

df.dropna(how='all') #该操作仅会删除所有列均为缺失值的行数据

基于Python数据分析之pandas统计分析

填充数据

使用一个常量来填补缺失值,可以使用fillna函数实现简单的填补工作:

1、用0填补所有缺失值

df.fillna(0)

基于Python数据分析之pandas统计分析

2、采用前项填充或后向填充

df.fillna(method='ffill') #用前一个值填充

基于Python数据分析之pandas统计分析

df.fillna(method='bfill') #用后一个值填充

基于Python数据分析之pandas统计分析

3、使用常量填充不同的列

df.fillna({'a1':100,'a2':200,'a3':300})

基于Python数据分析之pandas统计分析

4、用均值或中位数填充各自的列

a1_median = df['a1'].median() #计算a1列的中位数
a1_median=7.5

a2_mean = df['a2'].mean() #计算a2列的均值
a2_mean = 7.5

a3_mean = df['a3'].mean() #计算a3列的均值
a3_mean = 14.5

df.fillna({'a1':a1_median,'a2':a2_mean,'a3':a3_mean}) #填充值

基于Python数据分析之pandas统计分析

很显然,在使用填充法时,相对于常数填充或前项、后项填充,使用各列的众数、均值或中位数填充要更加合理一点,这也是工作中常用的一个快捷手段。

数据打乱(shuffle)

实际工作中,经常会碰到多个DataFrame合并后希望将数据进行打乱。在pandas中有sample函数可以实现这个操作。

df = df.sample(frac=1)

这样对可以对df进行shuffle。其中参数frac是要返回的比例,比如df中有10行数据,我只想返回其中的30%,那么frac=0.3。
有时候,我们可能需要打混后数据集的index(索引)还是按照正常的排序。我们只需要这样操作

df = df.sample(frac=1).reset_index(drop=True)

以上这篇基于Python数据分析之pandas统计分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
python中PIL安装简单教程
Apr 21 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
使用Python实现跳帧截取视频帧
May 31 Python
python里 super类的工作原理详解
Jun 19 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
django 模型字段设置默认值代码
Jul 15 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 #Python
Python统计学一数据的概括性度量详解
Mar 03 #Python
python多维数组分位数的求取方式
Mar 03 #Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 #Python
python Plotly绘图工具的简单使用
Mar 03 #Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 #Python
python实现扫雷游戏
Mar 03 #Python
You might like
Php部分常见问题总结
2006/10/09 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python版本的读写锁操作方法
2016/04/25 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
python lambda的使用详解
2021/02/26 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
美国牛仔品牌:True Religion
2018/11/16 全球购物
初中女生自我鉴定
2013/12/19 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
奠基仪式主持词
2014/03/20 职场文书
公共场所标语
2014/06/30 职场文书
庆元旦演讲稿
2014/09/15 职场文书
感谢信范文大全
2015/01/23 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏