基于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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python中的面向对象编程详解(下)
Apr 13 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
Tornado高并发处理方法实例代码
Jan 15 Python
浅谈Python中的私有变量
Feb 28 Python
Python中max函数用于二维列表的实例
Apr 03 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
编写python代码实现简单抽奖器
Oct 20 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 flush类输出缓冲剖析
2008/10/19 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
js 自动播放的实例代码
2013/11/19 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
微信小程序实现左右列表联动
2020/05/19 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
简单谈谈Python中函数的可变参数
2016/09/02 Python
python实现简单神经网络算法
2018/03/10 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
求职简历自荐信
2013/10/20 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
临床专业自荐信
2014/06/22 职场文书
股东合作协议书
2014/09/12 职场文书
财务整改报告范文
2014/11/05 职场文书
优秀英文求职信范文
2015/03/19 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android