基于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函数形参用法实例分析
Aug 04 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
在python中pandas的series合并方法
Nov 12 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
python 字典访问的三种方法小结
Dec 05 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python通过函数名调用函数的几种场景
Sep 23 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
matplotlib阶梯图的实现(step())
Mar 02 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中实现Javascript的escape()函数代码
2010/08/08 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python中内建函数的简单用法说明
2016/05/05 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
浅析Python 多行匹配模式
2020/07/24 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
项目计划书范文
2014/01/09 职场文书
机关财务管理制度
2014/01/17 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
六五普法心得体会2016
2016/01/21 职场文书