Python中DataFrame常用统计方法

目录

1.示例数据准备

2.重要参数说明

axis参数说明

skipna参数

3.常用统计方法

求和

求平均

累计求和

最小值/最大值

最小值/最大值的索引

累计最小值/最大值

累计乘积

一阶差分

非空值个数

df中等于某个值的索引

样本的分位数

方差和标准差

样本的偏度和峰度

描述性统计

将分位数添加到描述性统计

百分比变化

样本的相关系数

排名

判断样本的每个值是否在某个集合中

去重

统计频率


1.示例数据准备

import numpy as np
import pandas as pddata = [[1.4, np.nan],[7.1, -4.5],[np.nan, np.nan],[0.75, -1.3]]df = pd.DataFrame(data,index = ['a', 'b', 'c', 'd'],columns=['one','two'])print(df)

2.重要参数说明

axis参数说明

axis = 0就是行与行之间运算,axis = 1是列与列之间

# 对每一列求和
print(df.sum(axis = 0))

skipna参数

bool参数,是否跳过空值

默认skipna等于True,即空值不参与运算

如果空值nan要参与运算,结果会是nan

# 对每一列求和,nan参与运算
print(df.sum(axis = 0, skipna = False))

3.常用统计方法

求和

print("求和")
print(df.sum())          # 对每一列求和
print(df.sum(axis = 0))
print(df.sum(axis = 1))  # 对每一行求和
# 注意默认空值不进行运算,也就是【非空数求和】

求平均

print("求平均")
print(df.mean())  # 对每一列求平均
print(df.mean(axis = 'columns', skipna = False))  # 对每一行求平均
# 注意默认空值不进行运算,也就是【非空数求和/非空数个数】

累计求和

print("累计求和")
print(df.cumsum()) # NaN 处仍为 NaN, 默认NaN 不参与运算
print(df.cumsum(axis = 0)) 
print(df.cumsum(axis = 1)) 

最小值/最大值

print("最小值")
# 空值不参与比较,全为空值时返回空值
print(df.min()) 
print(df.min(axis = 0)) 
print(df.min(axis = 1)) print("全局最小值")
print(df.min().min()) print("最大值")
print(df.max()) 
print(df.max(axis = 0)) 
print(df.max(axis = 1)) print("全局最大值")
print(df.max().max()) 

最小值/最大值的索引

print("最小值的索引")
ret = df.idxmin()
print(type(ret))
print(ret)
print(df.idxmin(axis=1))print("最大值的索引")
print(df.idxmax())
print(df.idxmax(axis=1))

运行结果

最小值的索引
<class 'pandas.core.series.Series'>
one    d
two    b
dtype: object
a    one
b    two
c    NaN
d    two
dtype: object
最大值的索引
one    b
two    d
dtype: object
a    one
b    one
c    NaN
d    one
dtype: object

累计最小值/最大值

print("累计最小值")
print(df.cummin()) 
print(df.cummin(axis = 0)) 
print(df.cummin(axis = 1)) print("累计最大值")
print(df.cummax()) 
print(df.cummax(axis = 0)) 
print(df.cummax(axis = 1)) 

累计乘积

print("样本值的累计乘积") # NaN 处仍为 NaN, 默认NaN 不参与运算
print(df.cumprod()) 
print(df.cumprod(axis = 1)) 

一阶差分

print("样本值的一阶差分") # NaN与任何运算都是NaN
print(df.diff()) 
print(df.diff(axis = 1)) 

非空值个数

print("统计非空值个数")
print(df.count()) 
print(df.count(axis = 0)) 
print(df.count(axis = 1)) 

df中等于某个值的索引

print("全局最小值的索引")
print(df[df == df.min().min()]) 
boolmin = df[df == df.min().min()]
result = []
for index in boolmin.index:for col in boolmin.columns:if boolmin.loc[index,col] == df.min().min():result.append([index,col])
print(result)

样本的分位数

print("样本的分位数")
print(df.quantile())   # 默认50%分位数,就是中位数,返回series
print(df.quantile(0.7))  # 70%分位数,返回series
print(df.quantile(0.7,axis = 0))  # 70%分位数,返回seriesprint(df.quantile(0.7,axis = 1))  # 70%分位数,返回seriesprint(df["one"].quantile(0.7))  # 70%分位数,返回一个值

方差和标准差

print("计算样本的方差")
print(df.var()) 
print(df.var(axis = 1)) print("计算样本的标准差")
print(df.std()) 
print(df.std(axis = 1)) 

样本的偏度和峰度

print("计算样本的偏度(三阶矩)")
print(df.skew()) 
print(df.skew(axis = 1)) print("计算样本的峰度(四阶矩)")
print(df.kurt()) 
print(df.kurt(axis = 1)) 

描述性统计

print("数的描述统计")
# 总个数、平均值、标准差、最小值最大值、分位数
print(df.describe())  # dataframe
# 默认分位数是25%,50%,75%
#             one       two
# count  3.000000  2.000000
# mean   3.083333 -2.900000
# std    3.493685  2.262742
# min    0.750000 -4.500000
# 25%    1.075000 -3.700000
# 50%    1.400000 -2.900000
# 75%    4.250000 -2.100000
# max    7.100000 -1.300000print("非数的描述统计")
# 总个数、不重复值个数、出现最多的值、出现最多的值的出现次数
obj = pd.Series(['a', 'a', 'b', 'c'] * 4)
print(obj.describe())  # Series
# count     16
# unique     3
# top        a
# freq       8
# dtype: object

将分位数添加到描述性统计

# 自定义分位数
print(df.describe(percentiles=[.01,.05,.95,.99]))
#             one       two
# count  3.000000  2.000000
# mean   3.083333 -2.900000
# std    3.493685  2.262742
# min    0.750000 -4.500000
# 1%     0.763000 -4.468000
# 5%     0.815000 -4.340000
# 50%    1.400000 -2.900000
# 95%    6.530000 -1.460000
# 99%    6.986000 -1.332000
# max    7.100000 -1.300000

百分比变化

print("百分比变化")
df = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])print(df)
print(df.pct_change())
print(df.pct_change(axis = 0))
print(df.pct_change(axis = 1))

样本的相关系数

print("样本的相关系数")
df = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])print("计算两个 Series 之间的相关系数")
print(df['one'].corr(df['two']))print("获取完整的相关系数矩阵(列和列两两之间)")
print(df.corr())print("获取整个 dataframe 与某一列的相关相关系数")
print(df.corrwith(df['two']))print("获取两个 dataframe 之间的相关系数")
df1 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])df2 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['three','two'])
print(df1.corrwith(df2)) # 相同列名之间计算相关系数,只有一方存在的列返回空# 传入参数 axis = 'columns'即可按行进行计算 
# 注意计算行与行的相关系数时,列名必须全部相同
df1 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])df2 = pd.DataFrame([[1.40, 1],[7.10, 2],[3.12, 4.25],[0.75, -1.3]],index = ['a', 'b', 'c', 'd'],columns=['one','two'])
print(df1.corrwith(df2, axis = 'columns')) 

排名

pdobj.rank()排名

pdobj.rank(method = "average")

pdobj.rank(method = "min")

pdobj.rank(method = "average")

pdobj.rank(method = "first")

pdobj.rank(method = "dense")

解释

示例情况:假设有6个样本,A 是第 4 名,B,C,D,E 同为第 5 名,E 为第 9 名

参数解释

  • average:BCDE 三人的平均排名都是(5+6+7+8)/2 = 4.5
  • min:BCDE的排名都取最小排名取5
  • max:BCD的排名都取最大排名取8
  • first:值相同时,按出现顺序排名
  • dense:相同值的类型为同一个整数排名,不同值之间的排名步长为 1

默认情况下,按升序排名,也就是值越小排名越低,method取average。

obj = pd.Series([7, -5, 7, 4, 2, 0, 4], index = list('ABCDEFG'))print(obj.rank()) # 默认按升序 and 平均排名排序
print(obj.rank(ascending = True, method = 'average'))
print(obj.rank(method = 'first'))print(obj.rank(ascending = False)) # 按降序 and 默认的平均排名排序# dataframe 的排名
frame = pd.DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1],'c': [-2, 5, 8, -2.5]})
print(frame)print(frame.rank())                 # 默认行与行之间进行排名
print(frame.rank(axis = 'columns')) # 按列之间进行排名

判断样本的每个值是否在某个集合中

# 判断值是否具有成员资格
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
vip = ['b', 'c', 'e']
result = obj.isin(vip)
print(result)

去重

# 去重
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
newUnique = obj.unique()
print(newUnique)  # ['c' 'a' 'd' 'b']

统计频率

# 统计频率
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
# sort是否排序,默认False,如果设置为True,则按频率降序
print(pd.value_counts(obj.values, sort=False))
"""
输出结果:
c    3
b    2
a    3
d    1
dtype: int64
"""


end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题记录】简单篇-108-将有序数组转换为二叉搜索树

【题目描述】 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 【测试用例】 示例1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,…

【功耗问题排查】

一、如何处理具体功耗case 在手机功耗测试中&#xff0c;因为我们在功耗测试中&#xff08;电源电压&#xff09;为固定值&#xff08;老手机一般为3.8V左右&#xff0c;现在的大多项目采用4V左右&#xff09;&#xff0c;那么的大小直接由决定&#xff0c;所以&#xff0c;在沟…

Consul 配置文件深入解析

Consul是一个分布式服务发现和配置共享系统&#xff0c;它通过一个分布式的键值存储来实现服务的注册与发现。在这篇文章中&#xff0c;我们将深入探讨Consul的配置文件&#xff0c;并通过一些最佳实践来提高其专业性和逻辑性&#xff0c;以吸引更多的技术读者。 配置文件概览…

webassembly入门详解(C++)

一、环境配置 环境说明,操作系统为window操作系统。 1.1 下载和安装python 下载 需要python版本至少3.6版本 python下载地址:https://www.python.org/getit/ 安装 检测安装结果 win+R组合键->cmd->输入python->回车 1.2 下载和安装emsdk 下载 下载地址:https://gi…

vs2019 - 替换vs2019自带的cmake

文章目录 vs2019 - 替换vs2019自带的cmake概述笔记启动vs2019本地x64命令行的脚本查看vs2019自带的cmake的位置删掉旧版cmake将新版cmake的安装目录内容替换过来。查看vs2019本地x64命令行中的cmake版本配置为vs2019x64工程END vs2019 - 替换vs2019自带的cmake 概述 在看一个…

Linux上,用>>重定向指定的日志,如何实现定期归档?

工作中遇到这样的问题&#xff0c;程序执行时&#xff0c;用nohup后台挂起生成的日志文件&#xff0c;还是用>>重定向指定的日志文件&#xff0c;比如这个日志文件是test1.log&#xff0c;改变名字为test2.log&#xff0c;输出信息还是会继续在test2.log上输出&#xff0…

项目启动后 数据库表结构会被自动修改 删除字段

问题还原 我这表是有warehouse_code这个字段的 然后我启动项目后&#xff0c;发现这个字段被删除了 解决办法 看你的配置中是否有下面的配置 把这个配置删除就行了&#xff0c;这配置是根据Java实体来来创建修改数据库结构的

LINUX 入门 4

LINUX 入门 4 day6 7 20240429 20240504 耗时&#xff1a;240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行&#xff0c;要换行就打\ typedef 是 C 和 C 中的一个关键字&#xff0c;用于为已有的数据类型定义一个新的名字。…

Flink面试整理-状态管理和容错机制

在 Apache Flink 中,状态管理和容错机制是实现可靠数据处理的关键特性。它们确保即使在发生故障的情况下,数据处理也能保持一致性和正确性。以下是这些机制的主要方面: 状态管理 状态类型:Flink 支持多种状态类型,如值状态(ValueState)、列表状态(ListState)、映射状态…

SpringBoot 自定义 HandlerMethodArgumentResolver 搞定xml泛型参数解析

文章目录 介绍一、解析简单 xml 数据案例引入 Jackson 的 xml 支持定义 Message 对象&MessageHeader 对象定义 Controller 方法调用结果 二、解析带泛型的 XML 数据案例2.1 直接给 Message 加上泛型 T2.2 无法直接解析泛型参数了 三、自定义 MVC 的参数解析器实现泛型参数解…

OCR文本识别模型CRNN

CRNN网络结构 论文地址&#xff1a;https://arxiv.org/pdf/1507.05717 参考&#xff1a;https://blog.csdn.net/xiaosongshine/article/details/112198145 git:https://github.com/shuyeah2356/crnn.pytorch CRNN文本识别实现端到端的不定长文本识别。 CRNN网络把包含三部分&…

两个手机在一起ip地址一样吗?两个手机是不是两个ip地址

在数字时代的浩瀚海洋中&#xff0c;手机已经成为我们生活中不可或缺的一部分。随着移动互联网的飞速发展&#xff0c;IP地址成为了连接手机与互联网的桥梁。那么&#xff0c;两个手机在一起IP地址一样吗&#xff1f;两个手机是不是两个IP地址&#xff1f;本文将带您一探究竟&a…

微火全域外卖系统是什么?为什么市场占有率这么高?

近日&#xff0c;全域外卖领域又出现了新变动&#xff0c;一个名为微火的品牌凭借着其全域外卖系统&#xff0c;在短短几个月的时间里&#xff0c;就占领了大部分市场。截止发稿日期前&#xff0c;微火全域外卖系统的市场占有率已经超过48%。 据了解&#xff0c;所谓的全域外卖…

微信小程序之搜索框样式(带源码)

一、效果图&#xff1a; 点击搜索框&#xff0c;“请输入搜索内容消失”&#xff0c;可输入关键字 二、代码&#xff1a; 2.1、WXML代码&#xff1a; <!--搜索框部分--><view class"search"><view class"search-btn">&#x1f50d;&l…

Fatal error: invalid -march= option: `armv7-a‘

我也是不知所措。 解决办法 参考&#xff1a; 嵌入式交叉编译&#xff1a;libvpx&#xff08;全网首发&#xff09;-CSDN博客

数据库复习2

试述SQL的特点 有两个关系 S(A,B,C, D)和 T(C,D,E,F)&#xff0c;写出与下列查询等价的 SQL 表达式: 用SQL语句建立第2章习题6中的4个表&#xff1b;针对建立的4个表用SQL完成第2章习题6中的查询 针对习题4中的4个表试用SQL完成以下各项操作 (1)找出所有供应商的姓名和所在城市…

[图解]SysML和EA建模住宅安全系统-02

1 00:00:00,900 --> 00:00:02,690 这个就是一个块定义图了 2 00:00:03,790 --> 00:00:04,780 简称BDD 3 00:00:05,610 --> 00:00:08,070 实际上就是UML里面的类图 4 00:00:08,080 --> 00:00:09,950 和组件图的一个结合体 5 00:00:13,150 --> 00:00:14,690 我…

WDW-10B微机控制电子万能试验机技术方案

一&#xff0e;设备外观照片&#xff1a; 项目简介&#xff1a; 微机控制电子式万能试验机是专门针对高等院校、各种金属、非金属科研厂家及国家级质检单位而设计的高端微机控制电子式万能试验机、计算机系统通过全数字控制器&#xff0c;经调速系统控制伺服电机转动&#xff…

【FFmpeg】调用ffmpeg进行H264软解

调用FFmpeg库实现264软件解码 1. FFmpeg的编译2. 调用FFmpeg实现H264软解2.1 基本框架2.2 代码实现2.3 测试结果 3. 分析工具3.1 码流分析3.2 YUV分析 调用FFmpeg库实现264软件编码可参考http://t.csdnimg.cn/FfBOY 1. FFmpeg的编译 FFmpeg在Windows下的编译参考&#xff1a;h…

MT3033 新的表达式

代码&#xff1a; #include <bits/stdc.h> using namespace std; bool is_op(char c) {return c & || c |; } int priority(char op) { // 运算优先级。如果有-*/等别的运算符&#xff0c;则这个函数很有必要if (op & || op |){return 1;}return -1; } voi…