【数据分析专栏之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 启动参数…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
