【建议收藏】Pandas(一)——初见Series

news2024/11/25 4:33:45

请添加图片描述

文章目录

  • 📚引言
  • 📖库的安装以及一些说明
    • 📑库的安装
    • 📑一些说明
  • 📖Series
    • 📑创建一个Series
      • 🔖从列表创建Series
      • 🔖从字典创建Series
      • 🔖标量创建Series
    • 📑Series的特点与属性
      • 🔖Series取值
      • 🔖Series调用函数
      • 🔖Series间的操作
      • 🔖Series的属性
  • 📍总结

📚引言

🙋‍♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨‍🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。

✍️研究方向:复杂网络科学

🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞赛经验交流,网络爬虫等。

pandas作为python一个非常强大的数据分析和处理库,可以帮我们进行多种不同的任务,包括但不限于下面这些方面:

  • 数据探索
  • 数据清洗
  • 数据可视化

掌握pandas能够帮助我们有效的提高工作效率,也可以帮我们跟深入的探索数据背后的意义和规律。

从本文开始,我们将会按照pandas说明文档给出的学习路线出发,结合实际操作过程中遇到的问题逐步的掌握pandas这个强大的库。
话不多说,我们开始吧。

📖库的安装以及一些说明

📑库的安装

在开始之前请确保你已经安装了pandas的最新版本,你可以直接利用下面的代码在控制台安装pandas以及numpy:

pip install pandas
pip install numpy

亦或者习惯用Andaconda的小伙伴可以实用conda来安装,代码如下:

conda install pandas
conda install numpy

具体的安装以及环境配置流程不在本文的重点关注范围,后续我将会在后面的内容中发布安装相关的博文,如果需要可以点个关注持续关注我。

📑一些说明

需要说明的是本文的代码环境以及版本:

  • python : 3.8.16
  • pandas : 1.5.3
  • numpy : 1.23.5

最后,本系列将会使用Jupyter Notebook作为示范的编译环境。

注意:在开始使用pandas之前请在代码中导入两个库:
import pandas as pd
import numpyt as np

在本文中,我们主要讨论pandas中最重要的两种数据结构Series以及DataFrame。当然,本文只是对其进行粗浅的介绍,让大家知道它们到底是个什么玩意儿,在后续的更新中,我们将会基于这两个数据结构解锁更多的新姿势玩转pandas

我们首先来看基础数据结构Series。

📖Series

我们首先来看Pandas的说明文档对Series的解释:

说明文档原文:Series是一个一维标签数组,能够容纳任何数据类型(整数、字符串、浮点数、Python对象等),轴的标签被统称为索引。

从我的理解来看,可以把Series当成一个功能强大的字典,其可以快捷的帮我们进行一些操作并且有一些字典没有的特性。

在这里插入图片描述

特别的,Series也是后面要介绍的DataFrame的基本单位。

📑创建一个Series

创建一个Series只需要一句代码,如下:

s = pd.Series(data, index=index)

在这个基础创建函数中接受两个参数:

  • data : 用于创建Series的数据,可以是一个字典,一个ndarray(np中的数据结构)或者一个标量(例如:1)
  • index : data的标签,按照不同的情况传入参数不同,得到的结果不同

为了更好的演示上面的创建过程,我们来看下面几种情况:

🔖从列表创建Series

从列表创建一个Series当然是允许的,请看下面两个代码示例:

list_01 = [random.randint(0,100) for i in range(5)]
# 当我们没有传入index的时候会自动创建index
pd.Series(list_01)

>>> 0    33
>>> 1     8
>>> 2    80
>>> 3    16
>>> 4    56
>>> dtype: int64
list_01 = [random.randint(0,100) for i in range(5)]
# 注意这里的区别,我们传入了字符类型的index
pd.Series(list_01, index = ['a','b','c','d','e'])

>>> a    98
>>> b    44
>>> c    40
>>> d    78
>>> e    54
>>> dtype: int64

由上述代码我们可知,当我们使用类似利列表的序列创建Series时,如果不传入index,pandas将会帮我们默认生成从0开始的序列作为index。

当然,使用元组,ndarray等结构作为data创建Series的结果将会类似。使用numpy中的ndarray完成上述操作将会更加的简洁,请看下面的示例:

pd.Series(np.random.randn(5))

>>> 0    0.154329
>>> 1    0.369949
>>> 2    0.281314
>>> 3    0.880517
>>> 4    0.123413
>>> dtype: float64

说明文档原文:pandas支持非唯一的索引值。如果一个不支持重复索引值的操作被尝试,届时将引发一个异常。

针对上述这点注意,我们看下面这个例子:

# 在这里的index中我们赋了重复的值
test_s = pd.Series(np.random.randn(5),index = ['a','b','c','d','a'])
test_s['a']

>>> a   -0.486072
>>> a    1.693092
>>> dtype: float64

注意:虽然我们使用上述的重复index依然取到了值,但是在使用的过程中应该尽量避免重复的索引,以免有意外的报错发生。

🔖从字典创建Series

从字典创建一个Series的结果更容易被我们预料到,因为字典和Series的机制很相似,都有index对应的value。但是,还有一些其它的情况要说明,请看下面这个代码:

dict_01 = {
    'a':1,
    'b':2,
    'c':3,
    'd':4,
}
pd.Series(dict_01)

>>> a    1
>>> b    2
>>> c    3
>>> d    4
>>> dtype: int64

在上述的例子中,字典很顺利的生成了一个Series,但是如果我们传入的index超过了字典key的范围将会怎么样呢?请看下面这段代码:

dict_01 = {
    'a':1,
    'b':2,
    'c':3,
    'd':4,
}
# 字典有四个键,但是我们传入了五个index
pd.Series(dict_01, index = ['a','b','c','d','e'])

>>> a    1.0
>>> b    2.0
>>> c    3.0
>>> d    4.0
>>> e    NaN
>>> dtype: float64

可以看到,当我们传入的索引超出了字典的范围时并不会触发错误,Series自动的将多出来的索引赋为NaN即不存在。

说明文档原文:NaN(非数字)是pandas中使用的标准缺失数据标记。

🔖标量创建Series

当我们使用标量创建一个Series的时候,如果我们没有预先指定长度,那么它会默认生成一个只有一个数字的Series,如下所示:

pd.Series(5)

>>> 0    5
>>> dtype: int64

如果我们为其指定index那么其生成的Series将会变的不同,即生成定长的标量Series,如下所示:

pd.Series(5,index = ['a','b','c','d','e'])

>>> a    5
>>> b    5
>>> c    5
>>> d    5
>>> e    5
>>> dtype: int64

📑Series的特点与属性

🔖Series取值

Series可以像python内置序列一样让我们根据下标取数或者直接根据我们设定的index进行取数,如下所示:

test_s = pd.Series(range(5),index = ['a','b','c','d','e'])
# 利用数字序列取数
test_s[0]
# 利用index取数
test_s['a']

>>> 5
>>> 5

另外,Series还接受切片的操作,如下所示:

test_s[2:]

>>> c    2
>>> d    3
>>> e    4
>>> dtype: int64

进一步的,我们可以根据上述的索引对其进行赋值是肯定的,所以本文不在这里进行演示。

🔖Series调用函数

Series可以调用大多数NumPy中的函数,并且利用这种特性加上索引取数可以达到很好的过滤元素的效果,下面展示几个非常常用的函数:

test_s = pd.Series(np.random.randn(20))
# 求平均数
print(test_s.mean())
# 求标准差
print(test_s.std())
# 求中位数
print(test_s.median())
# 对Series的value进行排序
test_s.sort_values()

>>> -0.8208612506544736
>>> 0.7848416493146942
>>> -0.7914818370858607

>>> 1   -2.173978
>>> 5   -1.815420
>>> 0   -1.286937
>>> 4   -1.147945
>>> 3   -0.857540
>>> 7   -0.725424
>>> 9   -0.106355
>>> 8   -0.073792
>>> 6   -0.071470
>>> 2    0.050249
>>> dtype: float64

除上述较为常用的函数外,Series可用的方法有很多,如下所示:

print([attr for attr in dir(s) if not attr.startswith('_')])

结果如下:
在这里插入图片描述

🔖Series间的操作

Series可以利用常用的运算符进行拼接操作,并且允许NumPy中的函数直接对其进行操作,如下所示:

test_s = pd.Series(range(5),index = ['a','b','c','d','e'])
# 对Series进行自己相加
test_s + test_s
# 对Series进行乘法操作
test_s * 3
# 对Series进行幂次操作
test_s ** 3
# nunpy内置函数对其进行操作
np.exp(test_s)

特别的,Series会自动进行索引对齐,这是非常重要的性质,因为Series能够进行索引对其而使得其更加的灵活。我们看下面这两个例子:

# 创建两个Series
# 注意:在s_2中索引呗打乱了顺序
s_1 = pd.Series(range(5),index=['a','b','c','d','e'])
s_2 = pd.Series(range(5),index=['b','a','d','c','e'])


>>> a    0						b    0
>>> b    1						a    1
>>> c    2						d    2
>>> d    3						c    3
>>> e    4						e    4
>>> Name: s_1, dtype: int64		Name: s_2, dtype: int64

此时,如果我们对上述的两个Series相加,将会得到什么样的结果呢?我们相加试试看:

s_1 + s_2

>>> a    1
>>> b    1
>>> c    5
>>> d    5
>>> e    8
>>> dtype: int64

可以发现,Series自动对其了相等的索引进行相加了。

理解这个特性将会更好的帮我们理解Series强大的灵活性以及其的多样性。

🔖Series的属性

在Series中我们第一眼见到的有两个属性即dtype与name,我们将分别来介绍,首先来看dtype。

当我们调用Series的dtype属性时,就可以得到Series的dtype,如下所示:

s = pd.Series([i/2 for i in range(5)])
s.dtype

>>> dtype('float64')

原文介绍:这通常是一个NumPy的dtype。然而,pandas和第三方库在一些地方扩展了NumPy的类型系统,在这种情况下,dtype将是一个ExtensionDtype。

关于dtype的具体内容,我们将在后续的文章中详细说明,这里先做了解。

其次,name属性也是Series中一个非常重要的属性,当我们定义一个新的Series时,我们可以为其指定name。同时,我们也可以调用Series的name属性直接获取到Series的name。如下所示:

s = pd.Series([i/2 for i in range(5)], name = 'Ecample_2023')
s.name

>>> 'Ecample_2023'

当然,我们可以使用rename()函数来进行Series的重命名,代码如下:

s = pd.Series([i/2 for i in range(5)], name = 'Example_2023')
print(s.name)
s.rename('motify_Example_2023')

>>> Example_2023
>>>
>>> 0    0.0
>>> 1    0.5
>>> 2    1.0
>>> 3    1.5
>>> 4    2.0
>>> Name: motify_Example_2023, dtype: float64

📍总结

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

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

相关文章

SpringSecurity认证原理和自定义认证

认证原理和自定义认证 认证配置表单认证注销登录前后端分离认证添加验证码 自定义认证 自定义资源权限规则 /index 公共资源/hello … 受保护资源 权限管理 在项目中添加如下配置就可以实现对资源权限规则设定: Configuration public class WebSecurityConfigurer extend…

node笔记_http服务搭建(渲染html、json)

文章目录 ⭐前言⭐初始化项目调整npm 的script运行入口搭建hello world的http服务npm run dev执行主函数的http服务 ⭐http返回类型html模板文件返回安装express渲染html的字符串 渲染html文件 sendFile渲染json返回数据类型 res.json ⭐结束 ⭐前言 大家好,我是ym…

CTF权威指南 笔记 -第二章二进制文件- 2.2 -ELF文件格式

目录 ELF的文件类型 ELF文件的结构 ELF文件头 节头表 代码节 数据节和只读数据节 bss节 字符串表 符号表 重定位 可执行文件的装载 常见的段 ELF就是可执行可连接格式 为linux运行文件格式 ELF的文件类型 我们使用复杂的例子进行演示 #include<stdio.h>int gl…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络&#xff0c;并提示网络激活失败&#xff08;亲测有效&#xff01;&#xff09; 之前做区块链的一个虚拟机很久没打开&#xff0c;一直处于挂起状态&#xff0c;一直提示网络连接激活失败。试了很多种方法没解决&#xff0c;更…

人力资源管理系统有哪些推荐?

人力资源管理系统是现代企业管理中必不可少的工具&#xff0c;它可以帮助企业高效地管理人员的入职、离职、考勤、绩效、薪酬等方面的信息。 然而&#xff0c;市场上的HRM系统琳琅满目&#xff0c;选择一款合适的系统并不容易。 今天就来给大家介绍六款好用的人力资源管理系统…

自动化运维工具---Ansible Playbook语法实战(一)

目录 一、Ansible Playbook剧本初识 1.1 Ansible Playbook 基本概述 1.1.1 什么是playbook 1.1.2 Ansible playbook 与AD-Hoc的关系 1.2 Ansible Playbook 书写格式 1.2.1安装NFS 服务 1.3 Playbook变量详解 1.3.1 使用 vars定义变量 1.3.2 使用 vars_flies定义变量 …

中国平安将在2023年出现转机,复苏才刚刚开始

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 在解封后股价出现短暂反弹之后&#xff0c;由于市场担忧中国平安&#xff08;02318&#xff09;人寿保险部门新业务NBV&#xff08;用于衡量寿险公司新业务价值的一个重要指标,当一家保险公司的NBV指标越高,那么说明每新增…

码出高效:Java开发手册笔记(线程安全)

并发与并行的目标都是尽可能快地执行完所有任务。以医生坐诊为例&#xff0c;某个科室有两个专家同时出诊&#xff0c;这就是两个并行任务&#xff0c;其中一个医生&#xff0c;时而问诊&#xff0c;时而查看化验单&#xff0c;然后继续问诊&#xff0c;突然又中断去处理病人的…

总线、I/O总线、I/O接口

总线是计算机内数据传输的公共路径&#xff0c;用于实现两个或以上部件之间的信息交换。计算机系统中有多种总线&#xff0c;它们在各个层次上提供部件之间的连接和信息交换通路。 核内总线&#xff1a;在处理器核内部各元件之间连线的总线称为核内总线&#xff0c;可连接核内…

Java-数据结构-并查集<二>

一.并查集的简单介绍 二. 并查集的主要构成和实现方式 三.HashMap模板和数组模板 由于在下文的模板基本一致&#xff0c;不再每次都罗列&#xff0c;大体的模板如下&#xff0c;若有错误可以在leetcode找到对应的题目解答&#xff0c;已经附上连接。 HashMap class UnionFi…

本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础

​本周XR大新闻&#xff0c;AR方面&#xff0c;苹果首款MR或没有主打卖点&#xff0c;反而尽可能支持更多App和服务&#xff1b;扎克伯格表示基于AI的AR眼镜操作系统是下一代计算平台的基础&#xff1b;微软芯片工程VP Jean Boufarhat加入Meta芯片团队&#xff1b;Humane展示了…

[计算机图形学]高级光线传播与复杂外观建模(前瞻预习/复习回顾)

本篇不涉及技术细节* 一、高级光线传播* 1.有偏和无偏估计 无偏估计&#xff0c;比如我们在之前做路径追踪的时候&#xff0c;我们用许多样本去近似定积分的值&#xff0c;无论我们取的样本数量是多少&#xff0c;它的期望永远是对的&#xff0c;也就是我们真实的定积分的值&…

Python入门(一)Python概述与环境搭建

Python概述与环境搭建 1.概述1.1版本及下载1.2 Python 特点 2.环境搭建3.第一个程序“hello&#xff0c;world”4.可能会存在的问题 1.概述 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言…

【WAF】雷池waf升级体验

文章目录 前言一、更新二、功能体验1.仪表板2.自定义规则&#xff1a;3. 通用配置&#xff1a; 更新总结新增优化&#xff1a; 前言 最近雷池有比较大的更新&#xff0c;安装可以参考以前文章雷池waf安装&#xff0c;更新了数据统计也就是仪表板和自定义规则和通用配置还有IP高…

AI行为分析预警系统 opencv

AI行为分析预警系统通过pythonopencv网络模型Ai视觉智能分析技术&#xff0c;AI行为分析预警系统可以对实际场景下如车间、电力场景、化工场景、工业生产场景下的人员作业操作行为规范进行有针对性的定制开发&#xff0c;根据每个项目的不同的识别预警需求。OpenCV可以在不同的…

BEV(0)---Transformer

1 Transformer Transformer是一个Sequence to Sequence model&#xff0c;特别之处在于它大量用到了self-attention&#xff0c;替代了RNN&#xff0c;既考虑了Sequence的全局信息也解决了并行计算的问题。 1.1 self-attention&#xff1a; ①. 输入x1 ~ x4为一个sequence&…

Mysql-SQL优化

SQL优化 插入数据优化1&#xff09;批量插入数据2&#xff09;手动控制事务3&#xff09;主键顺序插入大批量插入数据 主键优化order by优化group by优化limit优化count优化update优化小结 插入数据优化 插入数据优化主要是对于insert进行批量插入时优化&#xff0c;下面我们就…

验证二叉搜索树-递归双指针法

1题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…

初识springboot【手把手教你搭建springboot项目】+springboot日志详解【超详细】

目录 一.springboot的概念 1.什么是springboot&#xff1f; 二.使用springboot进行开发的优势 springboot的设计原则是什么&#xff0c;使用springboot进行开发具有怎样的优势&#xff1f;&#xff08;M&#xff09; 三.手把手搭建一个springboot项目 ①创建项目并选择依赖…

枚举二进制数的子集

思想&#xff1a; 如1011的二进制子集有1011&#xff0c;1010&#xff0c;1001&#xff0c;1000&#xff0c;0011&#xff0c;0010&#xff0c;0001&#xff0c;0000 思想是每次对当前最小子元素-1与目标x取与运算。枚举到0为止。 成立原因&#xff1a;因为我们是由大到小&a…