转载,Pandas 数据统计用法
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)
1
2
3
4
5
6
7
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() #一次性输出多个描述性统计指标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
必须注意的是,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%分位数','均值','最大值','最大值位数','平均绝对偏差','方差','标准差','偏度','峰度'])
1
2
3
4
5
执行该函数,查看一下d1数据集的这些统计函数值:
df = pd.DataFrame(status(d1))
df
1
2
结果:
在实际的工作中,我们可能需要处理的是一系列的数值型数据框,如何将这个函数应用到数据框中的每一列呢?可以使用apply函数,这个非常类似于R中的apply的应用方法。
将之前创建的d1,d2,d3数据构建数据框:
df = pd.DataFrame(np.array([d1,d2,d3]).T, columns=['x1','x2','x3'])
df.head()
df.apply(status)
1
2
3
4
结果:
3、加载CSV数据
import numpy as np
import pandas as pd
bank = pd.read_csv("D://bank/bank-additional-train.csv")
bank.head() #查看前5行
1
2
3
4
5
描述性统计1:describe()
result = bank['age'].describe()
pd.DataFrame(result ) #格式化成DataFrame
1
2
描述性统计2:describe(include=[‘number’])
include中填写的是数据类型,若想查看所有数据的统计数据,则可填写object,即include=['object'];若想查看float类型的数据,则为include=['float']。
1
result = bank.describe(include=['object'])
1
含义:
count:指定字段的非空总数。
unique:该字段中保存的值类型数量,比如性别列保存了男、女两种值,则unique值则为2。
top:数量最多的值。
freq:数量最多的值的总数。
bank.describe(include=['number'])
1
连续变量的相关系数(corr)
bank.corr()
1
协方差矩阵(cov)
bank.cov()
1
删除列
bank.drop('job', axis=1) #删除年龄列,axis=1必不可少
1
排序
bank.sort_values(by=['job','age']) #根据工作、年龄升序排序
bank.sort_values(by=['job','age'], ascending=False) #根据工作、年龄降序排序
1
2
多表连接
准备数据:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
student:
score:
内连接
stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1
1
2
注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。
左连接
stu_score2 = pd.merge(df_student, df_score, on='Name',how='left')
stu_score2
1
2
左连接中,没有Score的学生Score为NaN
缺失值处理
现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法、填补法和插值法。
删除法
当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。
替补法
对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。
插补法
插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。
此处测试使用上面学生成绩数据进行处理
查询某一字段数据为空的数量
sum(pd.isnull(stu_score2['Score']))
结果:2
1
2
直接删除缺失值
stu_score2.dropna()
1
删除前:
删除后:
默认情况下,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'])
1
2
3
4
5
6
7
df.dropna() #该操作会删除所有有缺失值的行数据
1
df.dropna(how='all') #该操作仅会删除所有列均为缺失值的行数据
1
填充数据
使用一个常量来填补缺失值,可以使用fillna函数实现简单的填补工作:
1、用0填补所有缺失值
df.fillna(0)
1
2、采用前项填充或后向填充
df.fillna(method='ffill') #用前一个值填充
1
df.fillna(method='bfill') #用后一个值填充
1
3、使用常量填充不同的列
df.fillna({'a1':100,'a2':200,'a3':300})
1
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}) #填充值
1
2
3
4
5
6
7
8
9
10
很显然,在使用填充法时,相对于常数填充或前项、后项填充,使用各列的众数、均值或中位数填充要更加合理一点,这也是工作中常用的一个快捷手段。
数据打乱(shuffle)
实际工作中,经常会碰到多个DataFrame合并后希望将数据进行打乱。在pandas中有sample函数可以实现这个操作。
df = df.sample(frac=1)
1
这样对可以对df进行shuffle。其中参数frac是要返回的比例,比如df中有10行数据,我只想返回其中的30%,那么frac=0.3。
有时候,我们可能需要打混后数据集的index(索引)还是按照正常的排序。我们只需要这样操作
df = df.sample(frac=1).reset_index(drop=True)
————————————————
版权声明:本文为CSDN博主「T_白日梦想家」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/A632189007/java/article/details/76176985
转载,Pandas 数据统计用法的更多相关文章
- [py]pandas数据统计学习
pandas.core.base.DataError: No numeric types to aggregate错误规避 我没有去解决这个问题, 而用填充0规避了这个问题 统计 聚合 d = [ { ...
- pandas数据统计
1 count() 非空观测数量 2 sum() 所有值之和 3 mean() 所有值的平均值 4 median() 所有值的中位数 5 mode() 值的模值 6 std() 值的标准偏差 7 mi ...
- pandas数据框,统计某列或者某行数据元素的个数
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sinat_38893241/articl ...
- 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计
[转载]国内网站博客数据统计选免费Google Analytics还是百度统计 Google Analytics谷歌统计是我用的第一个网站统计工具,当然现在也一直在用.Google Analytics ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- PHP+Mysql+jQuery实现地图区域数据统计-展示数据
我们要在地图上有限的区块内展示更多的信息,更好的办法是通过地图交互来实现.本文将给大家讲解通过鼠标滑动到地图指定省份区域,在弹出的提示框中显示对应省份的数据信息.适用于数据统计和地图区块展示等场景. ...
- python数据统计,总数,平均值等
一般我们进行数据统计的时候要进行数据摸查,可能是摸查整体的分布情况啊.平均值,标准差,总数,各分段的人数啊.这时候用excel或者数据库统计都不方便. 我要统计的一个文件,太大了,还得分成15个文件, ...
- 在Sqlserver下巧用行列转换日期的数据统计
在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...
随机推荐
- C# 9 新特性 —— 补充篇
C# 9 新特性 -- 补充篇 Intro 前面我们分别介绍了一些 C# 9 中的新特性,还有一些我觉得需要了解一下的新特性,写一篇作为补充. Top-Level Statements 在以往的代码里 ...
- 一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系
公众号Mac代码分割阅读链接 前言 之前都是使用SparkStreaming开发,最近打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上.因为Flin ...
- 在onelogin中使用OpenId Connect Implicit Flow
目录 简介 OpenId Implicit Flow 创建onelogin的配置 页面的运行和请求流程 关键代码 总结 简介 onelogin支持多种OpenId Connect的连接模式,上一篇文章 ...
- Spring(2) --Bean相关
你对Spring中的bean了解吗?都有哪些作用域(Scope)? Spring 官方文档对 bean 的解释是: In Spring, the objects that form the backb ...
- Java 中泛型的实现原理
泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码.本文总结了 Java 泛型的三种形式以及泛型实现原理. 泛型 泛型的本质是对类型进行参数化,在代码逻 ...
- Thread线程源码解析,Java线程的状态,线程之间的通信
线程的基本概念 什么是线程 现代操作系统在运行一个程序的时候,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.线代操作系统调度的最小单位是线程.也叫做轻量级进程.在一 ...
- Ubuntu 18.04.4 LTS 更换国内系统源
Ubuntu 18.04.4 LTS 更换国内系统源 1.1) 好习惯先做备份在干活: mv /etc/apt/sources.list /etc/apt/sources.list.bak 1.2) ...
- 【Linux】Linux系统dev/目录下的tty
终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备.tty是Teletype的缩写.Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletyp ...
- KeepAlive安装以及简单配置
操作系统:Centos7.3 一.依赖安装 首先安装相关依赖: yum install -y gcc openssl-devel popt-devel yum -y install libnl lib ...
- wmic 查看主板信息
查看主板信息的一个命令:wmic baseboard get 当然在命令提示符里查看,真的很费劲,所以我们将命令格式化一下:wmic baseboard get /format:HFORM >c ...