【数据分析专栏之Python篇】五、pandas数据结构之Series
前言
大家好!本期跟大家分享的知识是 Pandas 数据结构—Series。
一、Series的创建
Series 是一种类似于一维数组的对象,由下面两部分组成:
values
:一组数据,ndarray 类型index
:数据索引
顾名思义,我们在创建 Series
对象时,需要传递一组数据,该数据大多数时候是可迭代对象。因此,下面三种创建方式都是将数据传入到 Series 方法中。
1.1 列表数组创建
以列表作为数据创建 Series。
list1 = list('ABCD') # 创建列表
s =pd.Series(list1) # 传递列表数据到 Series 方法中
print(s)
print(type(s.values))
print(type(s.index))
###########结果###########
0 A
1 B
2 C
3 D
dtype: object
<class 'numpy.ndarray'>
<class 'pandas.core.indexes.range.RangeIndex'>
以数组作为数据创建 Series。
n = np.array(range(5,10))
s2 = pd.Series(n)
s2
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int32
1.2 字典创建
前两种方式,都是只传递了数据,那么索引是默认索引(0 ~ N-1);下面的字典创建方式,则是以字典的键为索引,字典的值为数据。
d = {
'a':11,'b':22,'c':33,'d':44
}
s = pd.Series(d)
s
###########结果###########
a 11
b 22
c 33
d 44
dtype: int64
1.3 通过标量创建
s = pd.Series(100,index=range(5))
s
###########结果###########
0 100
1 100
2 100
3 100
4 100
dtype: int64
二、Series索引
从以上 Series 的创建中我们可以看出,Series 的索引是可以修改的
。我们先来探讨以下索引的作用。
-
获取元素:有多种获取方式,s.索引名,s[‘索引名’],s.loc[‘索引名’]
-
允许修改:(为
s.index
重新赋值即可,注意前后数量一致)
显式即表示使用索引名称的方式,隐式即表示使用序号的方式。后面的显式切片和隐式切片也是同理。
2.1 显式索引
取单个值时,三种方式:(假设 Series
对象名为 s
)
- s.索引名(数字索引不能用这种方式)
- s[‘索引名’]
- s.loc[‘索引名’]
取多个值时,返回一个新的 Series 对象,两种方式(也就是加中括号):
- s.[[‘索引名1’,‘索引名2’]]
- s.loc[[‘索引名1’,‘索引名2’]]
s = pd.Series(np.array(range(5,10)),index=list('abcde'),name='number')
print(s)
display(s.a,s['a'],s.loc['a'])
###########结果###########
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int32555
2.2 隐式索引
隐式索引和显示索引的区别就是它通过数字来获取值。因为是数字,因此 s.number
这种方式肯定 不能用了 ,其他都相同。
取单值,两种方式:
- s[number]
- s.iloc[number]
取多值,两种方式:
- s[[number1,number2]]
- s.iloc[[number1,number2]]
s = pd.Series(np.array(range(5,10)),index=list('abcde'),name='number')
print(s)
print('取单值')
print(s[1])
print(s.iloc[1])
print('取多值')
print(s[[1,2]])
print(s.iloc[[1,2]])
###########结果###########
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int32
a 5
b 6
c 7
d 8
e 9
Name: number, dtype: int32
取单值
6
6
取多值
b 6
c 7
Name: number, dtype: int32
b 6
c 7
Name: number, dtype: int32
三、Series切片
切片操作是获取一个新的 Series 对象的操作,显式切片是为左闭右闭,隐式切片时为左闭右开。
2.1 显式切片
两种方式:
- s[索引名1:索引名2]
- s.loc[索引名1:索引名2]
2.2 隐式切片
两种方式:
- s[number1:number2]
- s.iloc[number1:number2]
s = pd.Series({
'yw':100,
'math':150,
'eng':110,
'Python':130
})
print('数据:',end='')
print('-'*10)
print(s)
print('-'*10)
print('显式切片')
print(s['yw':'math'])
print('-'*10)
print(s.loc['yw':'math'])
print('-'*10)
print('隐式切片')
print(s[0:1])
print('-'*10)
print(s.iloc[0:1])
###########结果###########
数据:----------
yw 100
math 150
eng 110
Python 130
dtype: int64
----------
显式切片
yw 100
math 150
dtype: int64
----------
yw 100
math 150
dtype: int64
----------
隐式切片
yw 100
dtype: int64
----------
yw 100
dtype: int64
四、Series基本属性和方法
Series基本属性和方法是让我们更好了解数据组成的手段。
4.1 属性
属性 | 作用 |
---|---|
s.shape | 查看数据行列 |
s.ndim | 查看维度,Series 就是一维,ndim 恒等于1 |
s.size | 查看数据总数 |
s.index | 查看索引 |
s.values | 查看数据 |
s.name | 查看 Series 对象的 name,若未设定则为空 |
4.2 方法
方法 | 功能 |
---|---|
s.head() | 查看前5条数据,若传入数字 n ,则查看前 n 条 |
s.tail() | 查看后5条数据,若传入数字 n ,则查看后 n 条 |
s.isnull() | 判断数据是否为空,空的为 True ,不空的为 False |
s.notnull() | 判断数据是否不空,空的为 False ,不空的为 True |
4.3 案例——使用 bool 值去除空值
原理:Series 切片可以再传入一个 Series 对象,该 Series 对象索引要和原来相同,那么值为 False 的将不会被取出。
请看示例:
s = pd.Series(['a','e','f','b'])
s[pd.Series([True,True,False,True])]
###########结果###########
0 a
1 e
3 b
dtype: object
如果改为:
s = pd.Series(['a','e','f','b'])
s[pd.Series([True,True,False,True],index=list('abcd'))]
###########结果###########
那么将会报错:
IndexingError Traceback (most recent call last)
E:\Temp/ipykernel_15804/3537358820.py in <module>1 s = pd.Series(['a','e','f','b'])
----> 2 s[pd.Series([True,True,False,True],index=list('abcd'))]D:\PF\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)1001 1002 if com.is_bool_indexer(key):
-> 1003 key = check_bool_indexer(self.index, key)1004 key = np.asarray(key, dtype=bool)1005 return self._get_values(key)D:\PF\Anaconda3\lib\site-packages\pandas\core\indexing.py in check_bool_indexer(index, key)2550 indexer = result.index.get_indexer_for(index)2551 if -1 in indexer:
-> 2552 raise IndexingError(2553 "Unalignable boolean Series provided as "2554 "indexer (index of the boolean Series and of "IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
下面是 Series 去除空值的案例。
s = pd.Series(['zhangsan','lisi','a',np.NAN,None])
print('数据:'+'-'*10)
print(s)
conditon = s.isnull()
print('判空情况:'+'-'*10)
print(conditon)
# 使用 bool 值索引过滤数据
s = s[~conditon]
print('过滤结果:'+'-'*10)
print(s)
###########结果###########
数据:----------
0 zhangsan
1 lisi
2 a
3 NaN
4 None
dtype: object
判空情况:----------
0 False
1 False
2 False
3 True
4 True
dtype: bool
过滤结果:----------
0 zhangsan
1 lisi
2 a
dtype: object
五、Series运算
Series 运算包括算术运算和 Series 对象之间运算。算术运算是针对每一个元素的,有 +、-、*、/、 //、 %、 ** 等,这里不再赘述。Series 对象间的运算,只要记住,索引一个有一个没有时,计算值为 NaN
,其他按照算术运算计算即可。
- 算术运算
s = pd.Series(np.array(range(5,10)))
print(s)
s * 10
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int320 50
1 60
2 70
3 80
4 90
dtype: int32
- Series对象间的运算
s1 = pd.Series(np.array(range(5,10)))
s2 = pd.Series([3,6,10,12])
print(s1)
print(s2)
s1 + s2 # 索引一个有一个没有时,计算值为 NaN
###########结果###########
0 5
1 6
2 7
3 8
4 9
dtype: int32
0 3
1 6
2 10
3 12
dtype: int640 8.0
1 12.0
2 17.0
3 20.0
4 NaN
dtype: float64
六、Series多层行索引
6.1 Series多层索引的构建
Series 不仅支持单层索引,还支持多层索引。最简单的实现方式就是将 index
设置成多维。
下面以二级行索引为例:
s = pd.Series(np.random.randint(60,100,6),index=[['语文','语文','语文','数学','数学','数学'],['小明','小红','小丽','小明','小红','小丽']])
print(s)
###########结果###########
语文 小明 90小红 72小丽 97
数学 小明 81小红 74小丽 84
dtype: int32
6.2 Series多层索引的索引和切片操作
对于 Series
多层索引的索引和切片操作,只要记住以下两点:
- 要先取第一层,再取第二层,不能直接取第二层索引
- 获取到第一层之后,就是一个普通的单层索引 Series
- 隐式索引,直接得到数
具体的方式,还是索引和切片都分为显式和隐式,下面通过一个案例来演示。
索引:
s = pd.Series(np.random.randint(60,100,6),index=[['语文','语文','语文','数学','数学','数学'],['小明','小红','小丽','小明','小红','小丽']])
print(s)
# 索引
print('显式索引:'+'-'*10)
print(s['语文']) # 获取到单层 Series
print(s.loc['语文'])
print(s['语文']['小明'],s.loc['语文']['小明']) # 获取到单个值
print('隐式索引:'+'-'*10)
print(s.iloc[0])
print(s[0]) # 获取到单个值
###########结果###########
语文 小明 94小红 95小丽 60
数学 小明 66小红 84小丽 76
dtype: int32
显式索引:----------
小明 94
小红 95
小丽 60
dtype: int32
小明 94
小红 95
小丽 60
dtype: int32
94 94
隐式索引:----------
94
94
切片:
s = pd.Series(np.random.randint(60,100,6),index=[['语文','语文','语文','数学','数学','数学'],['小明','小红','小丽','小明','小红','小丽']])
s = s.sort_index()
print(s)
print('显式切片'+'-'*10)
print(s['数学':'语文'])
print(s.loc['数学':'语文'])
print('隐式切片'+'-'*10)
print(s[0:2])
print(s.iloc[0:2])
###########结果###########
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
显式切片----------
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
数学 小丽 67小明 64小红 92
语文 小丽 84小明 99小红 82
dtype: int32
隐式切片----------
数学 小丽 67小明 64
dtype: int32
数学 小丽 67小明 64
dtype: int32
结语
💕 本期跟大家分享的 “芝士” 就到此结束了,关于 Series 数据结构,你学会了吗?✨
🍻 我是南晨曦,在学习的路上一直前行,期待与你一起进步。~ 🍻
🔥如果文中有些地方不清楚的话,欢迎联系我,我会给大家提供思路及解答。🔥
参考文档
python数据分析:Pandas之Series
相关文章:

【数据分析专栏之Python篇】五、pandas数据结构之Series
前言 大家好!本期跟大家分享的知识是 Pandas 数据结构—Series。 一、Series的创建 Series 是一种类似于一维数组的对象,由下面两部分组成: values:一组数据,ndarray 类型index:数据索引 顾名思义&…...

中间件多版本冲突的4种解决方案和我们的选择
背景 在小小的公司里面,挖呀挖呀挖。最近又挖到坑里去了。一个稳定运行多年的应用,需要在里面支持多个版本的中间件客户端;而多个版本的客户端在一个应用里运行时会有同名类冲突的矛盾。在经过询问chatGPT,百度,googl…...
对 async/await 的理解
async/await 的理解 async/await 其实是 Generator 的语法糖,它能实现的效果都能用then 链来实现,它是为优化 then 链而开发出来的。从字面上来看,async 是“异步”的简写,await 则为等待,所以很好理解async用于申明一…...

Vue 整合 Element UI 、路由嵌套、参数传递、重定向、404和路由钩子(五)
一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式,创建一个名为 hello-vue 的工程,命令为: # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化,记得一路的 no vue init webpack hello-vue 1.2 安装…...
修改 Ubuntu 系统的时区
修改 Ubuntu 系统的时区 如果 Ubuntu 系统的时区设置不正确,您可以按照以下步骤进行调整: 1. 查看当前的时区设置,可以使用以下命令: timedatectl 这将显示当前系统的日期、时间和时区信息。 2. 如果时区设置不正…...

如何离线安装ModHeader - Modify HTTP headers Chrome插件?
如何离线安装ModHeader - Modify HTTP headers Chrome插件? 1.1 前言1.2 打开Chrome浏览器的开发者模式1.3 下载并解压打包好的插件1.4 解压下载好的压缩包1.5 加载插件1.6 如何使用插件? 1.1 前言 ModHeader 是一个非常好用的Chrome浏览器插件,可以用…...

在Linux中安装MySQL
在Linux中安装MySQL 检测当前系统中是否安装MySQL数据库 命令作用rpm -qa查询当前系统中安装的所有软件rpm -qa|grep mysql查询当前系统中安装的名称带mysql的软件rpm -qa | grep mariadb查询当前系统中安装的名称带mariadb的软件 RPM ( Red-Hat Package Manager )RPM软件包管理…...

python --windows获取启动文件夹路径/获取当前用户名/添加自启动文件
如何使用Python获取计算机用户名 一、Python自带的getpass模块可以用于获取用户输入的密码,但是它同样可以用来获取计算机用户名。 import getpassuser getpass.getuser() print("计算机用户名为:", user)二、使用os模块获取用户名 Python的…...

微信云托管(本地调试)⑥:nginx、vue刷新404问题
一、nginx默认路径 1.1、默认配置文件路径:/etc/nginx/nginx.conf 1.2、默认资源路径:/usr/share/nginx/html/index.html 二、修改nginx.conf配置 (注意配置中的:include /etc/nginx/conf.d/*.conf; 里面包了一个server配置文件…...

数据结构 二叉树(一篇基本掌握)
绪论 雄关漫道真如铁,而今迈步从头越。 本章将开始学习二叉树(全文共一万两千字),二叉树相较于前面的数据结构来说难度会有许多的攀升,但只要跟着本篇博客深入的学习也可以基本的掌握基础二叉树。 话不多说安全带系好&…...
可视化绘图技巧100篇高级篇(四)-南丁格尔玫瑰图(二)
目录 前言 适用场景 不适用场景 堆积式南丁格尔玫瑰图( Nightingale Rose Diagram)...

Stable Diffusion - Candy Land (糖果世界) LoRA 提示词配置与效果展示
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132145248 糖果世界 (Candy Land) 是一个充满甜蜜和奇幻的地方,由各种各样的糖果和巧克力构成。在糖果世界,可以看到&…...
ES6学习-module语法
Module语法 CommonJS模块 let { readfile } require(fs) # 等同于 let _fs require(fs) let readfile _fs.readfile //这种加载称为“运行时加载”ES6模块 import { stat, exists, readFile } from fs;这种加载称为“编译时加载”或者静态加载 静态加载带来的各种好处 …...

Flutter 实现按位置大小比例布局的控件
文章目录 前言一、如何实现?1、数值转成分数2、RowFlexible布局横向3、ColumnFlexible布局纵向 二、完整代码三、使用示例1、基本用法2、四分屏3、六分屏4、八分屏5、九分屏6、414分屏 总结 前言 做视频监控项目时需要需要展示多分屏,比如2x2、3x3、414…...

ES6 - 对象新增的一些常用方法
文章目录 1,Object.is()2,Object.asign()3,Object.getOwnPropertyDescriptors()4,Object.setPrototypeOf()和getPrototypeOf()5,Object.keys()、values() 和 entries()6,Object.fromEntries()7,…...

半导体存储电路
存储电路 存储单元:只能存储一位数据 寄存器:存储一组数据 存储单元 静态存储单元:包含锁存器和触发器,只要不断电,静态存储单元的状态会一直保持下去。 动态存储单元:利用电容的电荷存储效应来存储数据。…...

web前端之CSS操作
文章目录 一、CSS操作1.1 html元素的style属性1.2 元素节点的style属性1.3 cssText属性 二、事件2.1 事件处理程序2.1.1 html事件2.1.2 DOM0事件(适合单个事件)2.1.3 DOM2事件(适合多个事件) 2.2 事件之鼠标事件2.3 事件之Event事…...

Python SQLAlchemy ( ORM )
From Python中强大的通用ORM框架:SQLAlchemy:https://zhuanlan.zhihu.com/p/444930067Python ORM之SQLAlchemy全面指南:https://zhuanlan.zhihu.com/p/387078089 SQLAlchemy 文档:https://www.sqlalchemy.org/ SQLAlchemy入门和…...

鉴源实验室丨汽车网络安全运营
作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 概 述 1.1 背景 随着车辆技术的不断进步和智能化水平的提升,车辆行业正经历着快速的变革和技术进步。智能化…...

分布式链路追踪之SkyWalking详解和实战
SkyWalking 文章目录 SkyWalking1.SkyWalking概述2.SkyWalking架构设计3.SkyWalking部署4.应用程序接入SkyWalking5.SkyWalking配置应用告警5.1.告警规则5.2.Webhook(网络钩子)5.3.邮件告警实践 6.项目自动化部署接入SkyWalking6.1 整体思路6.2 启动参数…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...