社畜大学生的Python之pandas学习笔记,保姆入门级教学
接上期,上篇介绍了 NumPy,本篇介绍 pandas。
目录
- pandas 入门
- pandas 的数据结构介绍
- 基本功能
- 汇总和计算描述统计
- 处理缺失数据
- 层次化索引
pandas 入门
Pandas 是基于 Numpy 构建的,让以 NumPy 为中心的应用变的更加简单。
Pandas是基于Numpy的专业数据分析工具, 可以灵活高效的处理各种数据集
它提供了的数据结构有DataFrame和Series等
我们可以简单粗的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列
pandas 的数据结构介绍
1、Series
由一组数据(各种 NumPy 数据类型)和一组索引组成:
Values 和 index 属性:
给所创建的 Series 带有一个可以对各个数据点进行标记的索引:
与普通 NumPy 数组相比,可以通过索引的方式选取 Series 中的单个或一组值:
可将 Series 看成是一个定长的有序字典,它是索引值到数据值的一个映射(它可以用在许多原本需要字典参数的函数中)。
如果数据被存放在一个 python 字典中,可以直接通过这个字典来创建 Series:
如果只传入一个字典,则结果 Series 中的索引就是原字典的键(有序排列),上面的 states。
Series 最重要的一个功能是在算数运算中自动对齐不同索引的数据:
Series 对象本身及其索引都有一个 name 属性:
Series 的索引可以通过赋值的方式就地修改:
2、DataFrame
是一个表格型的数据结构。既有行索引也有列索引。DataFrame 中面向行和面向列的操作基本是平衡的。DataFrame 中的数据是以一个或多个二维块存放的。用层次化索引,将其表示为更高维度的数据。
构建 DataFrame:直接传入一个由等长列表或 NumPy 数组组成的字典。
会自动加上索引,但指定列序列,则按指定顺序进行排列:
和 Series 一样,如果传入的列在数据中找不到,就会产生 NA 值:
通过赋值的方式进行修改:
通过类似字典标记的方式或属性的方式,可以将 DataFrame 的列获取为一个Series:
行也可以通过位置或名称的方式进行获取,比如用索引字段 ix。
将列表或数组赋值给某个列时,其长度必须跟 DataFrame 的长度相匹配。如果赋值的是一个 Series,就会精确匹配 DataFrame 的索引,所有的空位都将被填上缺失值:
给不存在的列赋值会创建出一个新列,关键字 del 用于删除列:
通过索引方式返回的列是相应数据的视图,并不是副本,对返回的 Series 做的任何修改都会反映到源 DataFrame 上,通过 series 的 copy 方法即可显式地复制列。
另一种常见的数据形式是嵌套字典,如果将它传给 DataFrame,解释为——外层字典的键作为列,内层键作为行索引。
对结果进行转置:
指定索引按序列:
由 Series 组成的字典差不多也是一样的用法:
设置了 DataFrame 的 index 和 columns 的 name 属性,这些信息也会被显示,
values 属性以二维 ndarray 的形式返回 DataFrame 中的数据:
如果 DataFrame 各列的数据类型不同,值数组的数据类型就会选用能兼容所有列的数据类型(如 dtype = object)。
3、索引对象
pandas 的索引对象,管理轴标签和其他元数据(如轴名称等)。
构建 Series 或 DataFrame 时,所用到的任何数组或其他序列的标签都会被转换成一个 Index,且 Index 对象是不可修改的:
Index 的功能类似一个固定大小的集合:
基本功能
**1、重新索引**方法 reindex:创建一个适应新索引的新对象。
调用该 Series 的 reindex 将会根据新索引进行重排。如果某个索引值当前不存在, 就引入缺失值。
对于时间序列这样的有序数据,重新索引时可能需要做一些差值处理:
对于 DataFrame ,reindex 可以修改行、列索引,或两个都修改。如果仅传入一列,则会重新索引行:
使用 columns 关键字可重新索引列:
同时对行、列进行索引:
ix 标签索引功能:
丢弃制定轴上的项
drop 方法返回的是一个在指定轴上删除了指定值的新对象:
对于 DataFrame,可以删除任意轴上的索引值:
2、索引、选取和过滤
Series 索引的工作方式类似于NumPy 数组的索引,但Series 的索引值不只是整数:
利用标签的切片运算,其包含闭区间(与普通Python的切片运算不同):
对 DataFrame 进行索引就是获取一个列:
或多个列:
这种索引方式的特殊情况:通过切片或布尔型数组选取行。
另一种用法是通过布尔型 DataFrame 进行索引(在语法上更像 ndarray):
专门的索引字段 ix,是一种重新索引的简单手段:
3、算术运算和数据对齐
pandas 最重要的一个功能是对不同索引的对象进行算术运算。对不同的索引对,取并集:
自动的数据对齐操作在不重叠的索引出引入了 NA 值,即一方有的索引,另一方没有,运算后该处索引的值为缺失值。
对 DataFrame,对齐操作会同时发生在行和列上。
4、在算术方法中填充值
对运算后的 NA 值处填充一个特殊值(比如 0):
否则 e 列都是 NaN 值。
类似,在对 Series 和 DataFrame 重新索引时,也可以指定一个填充值:
用这几个特定字的,叫算术方法:add/ sub/ div/ mul ,即:加/减/除/乘。
5、DataFrame 和 Series 之间的运算
计算一个二维数组与其某行之间的差:
这个就叫做广播,下面的每行都做这个运算了。
默认情况下,DataFrame 和 Series 之间的算术运算会将 Series 的索引匹配到
DataFrame 的列,然后沿着行一直向下广播:
得到
做加法 frame+series2,找不到的值就并集为 NaN。
如果你希望匹配行,且在列上广播,则必须使用算术运算方法:
传入的轴号就是希望匹配的轴。
6、函数的应用和映射
NumPy 的 ufuncs 可用于操作 pandas 对象,以 abs 为例:
DataFrame 的 apply 方法:将函数应用到各列或行所形成的一维数组上:
许多最为常见的数据统计功能都被封装为 DataFrame 的方法,无需使用 apply 方法。
除标量值外,传递给 apply 的函数还可以返回由多个值组成的 Series:
用 applymap 得到 frame 中各个浮点值的格式化字符串:
Series 有一个用于应用元素级函数的 map 方法:
7、排序和排名
sort_index 方法:返回一个已排序的新对象
对于 DataFrame,可以根据任意一个轴上的索引进行排序:
指定了 axis=1,是对列进行排序。
默认按升序,降序用 ascending=False:
对 Series 进行排序,可用方法 sort_values():
在排序时,任何缺失值默认都会被放到 Series 末尾。在 DataFrame 上,用 by 根据列的值进行排序:
根据多个列:
rank 方法:默认情况下,rank 是通过“为各组分配一个平均排名”的方式破坏平级关系的。
根据值在原数据中出现的顺序给出排名:
按降序进行排名:
DataFrame 可以在行或列上计算排名:
8、带有重复值的轴索引
虽然许多 pandas 函数都要求标签唯一(如 reindex),但这不是强制性的。带有重复索引的 Series:
索引的 is_unique 属性可以判断它的值是否唯一。带有重复索引的 DataFrame:
在 Pandas 中,DataFrame.ix[i] 和 DataFrame.iloc[i] 都可以选取 DataFrame 中第
i 行的数据,那么这两个命令的区别在哪里呢?
ix 可以通过行号和行标签进行索引,而 iloc 只能通过行号索引,即 ix 可以看做是
loc 和 iloc 的综合。
汇总和计算描述统计
pandas 对象拥有一组常用的数学和统计方法:用于从 Series 中提取单个值,或从
DataFrame 的行或列中提取一个 Series。
跟 Numpy 数组方法相比,它们都是基于没有缺失数据的假设而构建的。
传入 axis=1 将会按行进行求和运算:
NA 值会自动被排除,如 1.40+NaN=1.40, NaN+NaN=0.00。
通过 skipna 选项可以禁用该功能:(得到 1.40+NaN=NaN, NaN+NaN=NaN)
返回间接统计(输出了值所在的行名):
累计型的(样本值的累计和):
一次性产生多个汇总统计:
对于非数值型数据,describe 会产生另外一种汇总统计:
1、相关系数与协方差
Series 和 DataFrame:
- corr 方法: 相关系数
- cov 方法:协方差
DataFrame 的 corrwith 方法:计算其列或行跟另一个 Series 或 DataFrame 之间的相关系数。传入一个 DataFrame 计算按列名配对的相关系数,传入 axis=1 即可按行进行计算。
2、唯一值、值计数以及成员资格从一维 Series 的值中抽取信息。
unique 函数:得到 Series 中的唯一值数组
value_counts:用于计算一个 Series 中各值出现的频率:
Series 按降序排列。value_counts 是一个顶级 pandas 方法,可用于任何数组或序列。
isin:用于判断矢量化集合的成员资格,可用于选取 Series 或 DataFrame 列中数据的子集:
处理缺失数据
pandas 的设计目标之一就是让缺失数据的处理任务尽量轻松。
pandas 使用浮点值 NaN(Not a Number) 表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。
python 内置的 None 值也会被当做 NA 处理(如 string_data[0]=None)。
1、滤掉缺失数据
对于一个 Series, dropna 返回一个仅含非空数据和索引值的 Series:
通过布尔型索引也可以达到这个目的:
对于 DataFrame 对象,dropna 默认丢弃任何含有缺失值的行:
丢弃全为 NA 的那些行,axis=1 则丢弃列:
只想留下一部分参数,用 thresh 参数:
thresh=3:保留至少 3 个非空值的行,即一行中有 3 个值是非空的就保留.
2、填充缺失数据
fillna 方法:通过一个常数调用 fillna 就会将缺失值替换为那个常数值。
通过一个字典调用 fillna,可以实现对不同的列填充不同的值:
fillna 默认会返回新对象(副本),但也可以对现有对象进行就地修改:
插值方法(对 reindx 有效的也可用于 fillna):
你可以用 fillna 实现许多别的功能,比如传入 Series 的平均值或中位数:
层次化索引
在一个轴上用多个(2 个以上)索引级别,即以低维度形式处理高维度数据。MultiIndex 索引的 Series 的格式化输出形式:
选取数据子集:
在“内层”中进行选取:
层次化索引在数据重塑和基于分组的操作中很重要。比如说,上面的数据可以通过其 unstack 方法被重新安排到一个 DataFrame 中,它的逆运算是 stack:
对于一个 DataFrame,每条轴都可以有分层索引:
各层都可以有名字(可以是字符串,也可以是别的 Python 对象)。注意不要将索引名称跟轴标签混为一谈。
有了分部的列索引,可以轻松选取列分组。
可以单独创建 MultiIndex 然后复用。上面的 DataFrame 中的分级列可以这样创建:
1、重排分级顺序
重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。
swaplevel:接受两个级别编号或名称,返回一个互换了级别的新对象,数据不发生改变:
sortlevel:根据单个级别中的值对数据进行排序(得到的最终结果是有序的)
2、根据级别汇总统计
level 选项:用于指定在某条轴上求和的级别。
如下所示,分别根据行或列上的级别来对行、对列进行求和:
3、使用 DataFrame 的列
将DataFrame 的一个或多个列当做行索引来用,或将行索引变成DataFrame 的列:
set_index 函数:将其一个或多个列转换为行索引,并创建一个新的 DataFrame。默认情况下,那些列会从 DataFrame 中移除,也可以将其保留下来:
reset_index:将层次化索引的级别转移到列里面(和 set_index 相反)
不足之处,欢迎指正。
相关文章:

社畜大学生的Python之pandas学习笔记,保姆入门级教学
接上期,上篇介绍了 NumPy,本篇介绍 pandas。 目录 pandas 入门pandas 的数据结构介绍基本功能汇总和计算描述统计处理缺失数据层次化索引 pandas 入门 Pandas 是基于 Numpy 构建的,让以 NumPy 为中心的应用变的更加简单。 Pandas是基于Numpy…...

20_FreeRTOS低功耗模式
目录 低功耗模式简介 STM32低功耗模式 Tickless模式详解 Tickless模式相关配置 实验源码 低功耗模式简介 很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等。 一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。 FreeRTOS也…...

Hive的使用方式
操作Hive可以在Shell命令行下操作,或者是使用JDBC代码的方式操作 针对命令行这种方式,其实还有两种使用 第一个是使用bin目录下的hive命令,这个是从hive一开始就支持的使用方式 后来又出现一个beeline命令,它是通过HiveServer2服…...

Flume三大核心组件
Flume的三大核心组件: Source:数据源 Channel:临时存储数据的管道 Sink:目的地 Source:数据源:通过source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的 channel Flume内置支持读…...

数据结构(六)二叉树
一、树形结构概念树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:1、有一个…...

Docker buildx 的跨平台编译
docker buildx 默认的 docker build 命令无法完成跨平台构建任务,我们需要为 docker 命令行安装 buildx 插件扩展其功能。buildx 能够使用由 Moby BuildKit 提供的构建镜像额外特性,它能够创建多个 builder 实例,在多个节点并行地执行构建任…...

【java基础】方法重载和方法重写
文章目录方法重载方法重写方法重载 方法重载就是可以在一个类里面定义多个相同名称的方法,只需要参数列表的个数或者类型不同就行。 public class Overload {public int add(int a, int b) {return a b;}public double add(double a, double b) {return a b;}}对…...

Gradle7.4安装与基本使用
文章目录一.前言二.下载Gradle三.Gradle镜像源-全局级配置四.配置Gradle wrapper-项目级配置五.Gradle对测试的支持五.生命周期5.1 settings文件六.Gradle任务入门6.1 任务行为6.2 任务依赖方式七. Dependencies依赖引入7.1 依赖冲突及解决方案八.Gradle整合多模块SpringBoot九…...

[系统安全] 虚拟化安全之虚拟化概述
本文为笔者从零基础学习系统安全相关内容的笔记,如果您对系统安全、逆向分析等内容感兴趣或者想要了解一些内容,欢迎关注。本系列文章将会随着笔者在未来三年的读研过程中持续更新,由于笔者现阶段还处于初学阶段,不可避免参照复现各类书籍内容,如书籍作者认为侵权请告知,…...

如何从零开始系统的学习项目管理?
经常会有人问,项目管理到底应该学习一些什么?学习考证之后能得到什么价值? 以下我就总结一下内容 一,学习项目管理有用吗? 有效的项目管理带来的益处大致包括以下几个方面:更有效达成业务目标、满足相关…...

面试题-----
面试题---- 一.HTML 1.常用哪些浏览器进行测试,对应有哪些内核? ①IE------------------->Trident ②Chrome---------->以前是Webkit现在是Blink ③Firefox------------>Gecko ④Safari-------------->Webkit ⑤Opera--------------&…...

线材-电子线载流能力
今天来讲的是关于电子线的一个小知识,可能只做板子的工程师遇到此方面的问题会比较少,做整机的工程师则必然会遇到此方面问题,那就是线材问题。 下面主要说下电子线的过电流能力。(文末有工具下载)电子线(h…...

单变量回归问题
单变量回归问题 对于某房价问题,x为房屋大小,h即为预估房价,模型公式为: hθ(x)θ0θ1xh_{\theta}(x)\theta_{0}\theta_{1}x hθ(x)θ0θ1x 要利用训练集拟合该公式(主要是计算θ0、θ1\theta_{0}、\theta_{1}θ…...

ubuntu/linux系统知识(36)linux网卡命名规则
文章目录背景命名规范系统默认命名规则优势背景 很久以前Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,属于biosdevname 命名规范。 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是et…...

java的一些冷知识
接口并没有继承Object类首先接口是一种特殊的类,理由就是将其编译后是一个class文件大家都知道java类都继承自Object,但是接口其实是并没有继承Object类的 可以自己写代码测试: 获取接口类的class对象后遍历它的methods,可以发现是不存在Obje…...

java代理模式
代理模式 为什么要学习代理模式?因为这是SpringAOP的底层! 【SpringAOP和SpingMVC}】 代理模式的分类: 静态代理 动态代理 代理就像这里的中介,帮助你去做向房东租房,你不能直接解出房东,而房东和中介…...

JUC包:CountDownLatch源码+实例讲解
1 缘起 有一次听到同事谈及AQS时,我有很多点懵, 只知道入队和出队,CLH(Craig,Landin and Hagersten)锁,并不了解AQS的应用, 同时结合之前遇到的多线程等待应用场景,发现…...

Log4j2基本使用
文章目录1. Log4j2入门2. Log4j2配置3. Log4j2异步日志4. Log4j2的性能Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来了一些重大的提升,主要有: 异常处理,…...

A2L在CAN FD总线的使用
文章目录 前言CAN时间参数BTL CyclesTime Quantum时间份额SWJ同步跳转宽度波特率计算采样点计算CAN FD的第二采样点SSP推荐配置A2L配置总结前言 A2L作为XCP标定协议的载体,包括了总线信息的定义。本文介绍如何将基于CAN总线的A2L扩展为支持CAN-FD的A2L CAN时间参数 在介绍配…...

Android JetPack之启动优化StartUp初始化组件的详解和使用
一、背景 先看一下Android系统架构图 在Android设备中,设备先通电(PowerManager),然后加载内核层,内核走完,开始检查硬件,以及为硬件提供的公开接口,然后进入到库的加载。库挂载后开…...

[11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳
升级学校云系统我们学校要根据目前学生互联网在线学习、教师教学资源电子化、教学评价过程化精细化的需求,计划升级为云教学系统。请同学们根据学校发展实际考虑云交付模型包含哪些?云部署采用什么模型最合适?请具体说明。9月3日买电脑还是租…...

C++11/C++14:lambda表达式
概念 lambda表达式:是一种表达式,是源代码的组成部分闭包:是lambda表达式创建的运行期对象,根据不同的捕获模式,闭包会持有数据的副本或引用闭包类:用于实例化闭包的类,每个lambda表达式都会触…...

算法课堂-分治算法
分治算法 把一任务分成几部分(通常是两部分)来完成(或只完成一部分),从而实现整个任务的完成 或者你可以把递归理解为分治算法的一部分 因为递归就是把问题分解来解决问题 例子 称假币 最笨的方法:两两称…...

操作系统权限提升(十六)之绕过UAC提权-CVE-2019-1388 UAC提权
系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权 操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权 注&a…...

实例9:四足机器人运动学正解平面RR单腿可视化
实例9:四足机器人正向运动学单腿可视化 实验目的 通过动手实践,搭建mini pupper四足机器人的腿部,掌握机器人单腿结构。通过理论学习,熟悉几何法、旋转矩阵法在运动学正解(FK)中的用处。通过编程实践&…...

堆的基本存储
一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数…...

如何获取物体立体信息通过一个相机
大家都知道的3D 技术是通过双眼视觉差异 得到的 但是3D的深度并没有那么强 为什么眼睛看到的就那么强 这无法让我们相信这个视觉差理论是和人眼睛立体感是一个原理 这个如今3D 电影都在用的技术 是和真正的人眼立体感 不一样的 或者说是有瑕疵的 分析一下现在的立体感技术 是通…...

【数据挖掘实战】——中医证型的关联规则挖掘(Apriori算法)
目录 一、背景和挖掘目标 1、问题背景 2、传统方法的缺陷 3、原始数据情况 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体过程 第1步:数据获取 第2步:数据预处理 第3步:构建模型 三、思考和总结 项目地址:Data…...

一些硬件学习的注意事项与快捷方法
xilinx系列软件 系统适用版本 要安装在Ubuntu系统的话,要注意提前看好软件适用的版本,不要随便安好了Ubuntu系统又发现对应版本的xilinx软件不支持。 如下图,发行说明中会说明这个版本的软件所适配的系统版本。 下载 vivado vitis这些都可以…...

【Tomcat】Tomcat安装及环境配置
文章目录什么是Tomcat为什么我们需要用到Tomcattomcat下载及安装1、进入官网www.apache.org,找到Projects中的project List2、下载之后,解压3、找到tomcat目录下的startup.bat文件,双击之后最后结果出现多少多少秒,表示安装成功4、…...