社畜大学生的Python之pandas学习笔记,保姆入门级教学

news2024/11/25 7:09:36

接上期,上篇介绍了 NumPy,本篇介绍 pandas。

目录

  • pandas 入门
  • pandas 的数据结构介绍
  • 基本功能
  • 汇总和计算描述统计
  • 处理缺失数据
  • 层次化索引

pandas 入门

Pandas 是基于 Numpy 构建的,让以 NumPy 为中心的应用变的更加简单。
Pandas是基于Numpy的专业数据分析工具, 可以灵活高效的处理各种数据集

它提供了的数据结构有DataFrameSeries

我们可以简单粗的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列

pandas 的数据结构介绍

1、Series

由一组数据(各种 NumPy 数据类型)和一组索引组成:
在这里插入图片描述

Valuesindex 属性:
在这里插入图片描述

给所创建的 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 相反)

在这里插入图片描述

不足之处,欢迎指正。

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

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

相关文章

【20230225】【剑指1】分治算法(中等)

1.重建二叉树class Solution { public:TreeNode* traversal(vector<int>& preorder,vector<int>& inorder){if(preorder.size()0) return NULL;int rootValuepreorder.front();TreeNode* rootnew TreeNode(rootValue);//int rootValuepreorder[0];if(preo…

Java学习--多线程(等待唤醒机制)生产者消费者

3.生产者消费者 3.1生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十分经典的多线程协作的模式&#xff0c;弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。 所谓生产者消费者问题&#xff0c;实际上主要是包含了两类线程&#xff1a; ​ 一类是生…

C++ primer 之 extern

C primer 之 extern什么是声明什么是定义两者有什么区别ertern的作用什么是声明 就是使得名字为程序所知&#xff0c;一个文件如果想使用别处定义的名字就必须包含对那个名字的声明。 什么是定义 负责创建与名字关联的实体。 两者有什么区别 变量声明和声明都规定了变量的…

FPGA纯verilog解码SDI视频 纯逻辑资源实现 提供2套工程源码和技术支持

目录1、前言2、硬件电路解析SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像输出FDMA图像缓存HDMI输出3、工程1详解&#xff1a;无缓存输出4、工程2详解&#xff1a;缓存3帧输出5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视…

多元回归分析 | LASSO多输入单输出预测(Matlab完整程序)

多元回归分析 | LASSO多输入单输出预测(Matlab完整程序) 目录 多元回归分析 | LASSO多输入单输出预测(Matlab完整程序)预测结果评价指标基本介绍程序设计预测结果 评价指标 LASSO回归 训练集平均绝对误差MAE:1.7669 训练集平均相对误差MAPE:0.051742 训练集均方根误差MSE…

【ARMv8 编程】ARMv8 指令集介绍

ARMv8 架构中引入的最重要的变化之一是增加了 64 位指令集。该指令集补充了现有的 32 位指令集架构。这种增加提供了对 64 位宽整数寄存器和数据操作的访问&#xff0c;以及使用 64 位长度的内存指针的能力。新指令被称为 A64&#xff0c;以 AArch64 执行状态执行。ARMv8 还包括…

编码的基本概念

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;information-theory】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 信息论 也可获取。 文章目录信源编码分类前缀…

nginx模块介绍

新编译前&#xff0c;在对应的nginx原编译文件夹 如&#xff1a;nginx-1.23.0 下&#xff0c;要 make clean 清空以前编译的objs文件夹&#xff0c;实际上就是执行了rm objs文件夹。 很多要用到git&#xff0c;先yum install git -y echo-nginx-module 让nginx直接使用echo的…

基于SpringBoot的任务管理三种方式

文章目录前言一&#xff0c;异步任务1.1 无返回值异步任务调用1.2 有返回值异步任务调用二、定时任务2.1 背景介绍2.2 todo三、邮箱任务3.1 todo前言 开发 web 应用时&#xff0c;多数应用都具备任务调度功能&#xff0c;常见的任务包括异步任务、定时任务和邮件任务。我们以数…

springboot+vue企业固定资产管理系统java

资产管理系统可以更加直观的了解到企业资产的使用情况&#xff0c;让企业资产透明化。资产管理系统可以帮助企业标记企业所有的资产&#xff0c;这些资产包括电脑&#xff0c;桌子&#xff0c;椅子等不动资产的标识&#xff0c;以及固定资产的新增&#xff0c;修改&#xff0c;…

渗透测试 | UserInfo信息收集

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

Leetcode 双指针详解

双指针 双指针顾名思义&#xff0c;就是同时使用两个指针&#xff0c;在序列、链表结构上指向的是位置&#xff0c;在树、图结构中指向的是节点&#xff0c;通过或同向移动&#xff0c;或相向移动来维护、统计信息 在数组的区间问题上&#xff0c;暴力算法的时间复杂度往往是O…

分布式项目-规格参数(13)

【今日成果】&#xff1a; //商品维护模块&#xff1b;其中值得一提的是。商品的介绍全部都做成图片的形式&#xff0c;这样有利于去维护。 商品模块中的页面在created中一开始要对会员等级进行查询操作&#xff0c;访问MemberController中的list接口。 //维护规格参数信息…

【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】

离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计一、DWS层设计要点二、DWS层设计分析 - 1d/nd1.DWS层设计一&#xff1a;不考虑用户维度2.DWS层设计二&#xff1a;考虑用户维度2.DWS层设计三 &#xff1a;考虑用户商…

骨骼控制(一)——动画动态节点(AnimDynamics)

文章目录一、引言二、骨骼控制三、UE蓝图中提供的骨骼控制节点——AnimDynamics动画蓝图节点1、什么是AnimDynamics动画蓝图节点①使用盒体计算惯性②使用约束来限制移动2、AnimDynamics节点的几种常用例子①单骨骼模拟②骨骼链模拟 <h2 id1>③群魔乱舞&#xff08;这是错…

YOLOv8之C2f模块——与YOLOv5的C3模块对比

一、源码对比 YOLOv8完整工程代码下载&#xff1a;ultralytics/ultralytic   C2f模块源码在ultralytics/nn/modules.py下&#xff0c;源码如下&#xff1a; class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n1, shortcutFalse, g1, e…

安装kibana 报错/访问不了

安装kibana 报错1&#xff0c;elasticsearch.yaml 和kibana.yaml 配置问题2&#xff0c;elasticsearch 和kibana版本不一致3&#xff0c;索引问题1&#xff0c;elasticsearch.yaml 和kibana.yaml 配置问题 我的RPM安装的&#xff0c;配置文件都在/etc/ vim /etc/elasticsearc…

【Python知识点桂电版】02组合数据类型

一、序列序列简介序列是指一种包含多项数据的数据结构&#xff0c;分为不可变序列和可变序列。可变序列可修改序列内的元素如列表&#xff0c;二不可变序列一旦建立就不能修改其中的元素&#xff0c;字符串和元组属于不可变序列。列表和元组的创建列表&#xff1a;列表名 [元素…

大学物理期末大题专题训练总结-热学大题

今天下午去找郑老师权老师等去答疑&#xff0c;老师说大题会考查得比较套路&#xff0c;计算不难。明天就要考试了&#xff0c;再把大题常见题型总结一下&#xff0c;热学这块我做完了蓝本的热学题目&#xff0c;发现了如下三种&#xff1a;有关循环过程曲线的&#xff1a;给出…

简历信息提取论文笔记Information Extraction from Resume Documents in PDF Format

标题&#xff1a;Information Extraction from Resume Documents in PDF Format下载地址&#xff1a;https://library.imaging.org/ei/articles/28/17/art00013长度&#xff1a;8页发表时间&#xff1a;2016引用量cite27先读标题、摘要、结论、然后 methods/experiment design,…