【数据分析专栏之Python篇】五、pandas数据结构之Series

news2024/10/6 8:28:29

前言

大家好!本期跟大家分享的知识是 Pandas 数据结构—Series。

一、Series的创建

Series 是一种类似于一维数组的对象,由下面两部分组成:

  • values:一组数据,ndarray 类型
  • index:数据索引

image-20230727092138996

顾名思义,我们在创建 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: int32

5

5

5

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: int32

0    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: int64

0     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

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

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

相关文章

华为智选首款纯电轿跑“LUXEED”能大卖吗?

监制 | 何玺 排版 | 叶媛 华为智选纯电轿跑来袭&#xff01; 8月7日&#xff0c;华为常务董事余承东在社交媒体上发文&#xff0c;宣布华为智选即将推出首款“突破想象”的纯电轿跑车。 01 华为智选首款纯电轿跑来袭 余承东的发文引起了极大关注&#xff0c;在各大媒体的报…

2024考研408-计算机网络 第六章-应用层学习笔记

文章目录 前言一、网络应用模型1.1、认识应用层功能和特点1.2、网络应用层模型&#xff1a;1.2.1、客户/服务器&#xff08;C/S&#xff09;模型1.2.2、P2P模型 二、DNS系统2.1、认识DNS与IP地址的关系2.2、DNS解析的大致流程2.3、域名的分类2.4、域名服务器的分类2.5、域名解析…

linux (platform driver)平台设备驱动匹配方法

Table of Contents 一、匹配函数platform_match 1.1、设备树匹配方法 1.2、id_table匹配方法 1.3、dev-name和platform_driver->drv->name匹配方法 一、匹配函数platform_match 平台设备驱动分为设备层和驱动层&#xff0c;每当有新的设备或者新的设备驱动注册时都要…

webshell链接工具-antSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 任何人不得将其用于非法用途以及盈利等目的&#xff0c;否则后果自行承担并将追究其相关责任&#xff01; 项目地址&#xff1a; https://github.c…

GitOps 与 DevOps:了解关键差异,为企业做出最佳选择

在软件开发领域&#xff0c;GitOps 和 DevOps 是加强协作和实现软件交付流程自动化的重要技术。虽然这两种模式都旨在提高软件开发生命周期的效率&#xff0c;但它们的核心原则和实施方式却各不相同。 本篇文章将帮助您了解 GitOps 和 DevOps 之间的差异、它们的工作流程&am…

IBM Spectrum LSF 负载共享工具基本介绍和使用

IBM Spectrum LSF 负载共享工具基本介绍和使用 LSF&#xff08;Load Sharing Facility&#xff09;是IBM旗下的一款分布式集群管理系统软件&#xff0c;负责计算资源的管理和批处理作业的调度。它给用户提供统一的集群资源访问接口&#xff0c;让用户透明地访问整个集群资源。…

Python-OpenCV中的图像处理-颜色空间转换

Python-OpenCV中的图像处理-颜色空间转换 颜色空间转换获取HSV的值 颜色空间转换 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种&#xff1a; BGR G r a y 和 B G R Gray 和 BGR Gray和BGRHSV。 注意&#xff1a;在 OpenCV 的…

linux基于信号量实现多线程生产者消费者模型

基于信号量实现多线程生产者消费者模型。 编程思路&#xff1a; 1.食物的初始化编号为100&#xff1a; beginnum 100&#xff1b; 2.仓库有5个空碗&#xff0c;最多保存5个食物&#xff1a;queue[5]&#xff1b; 3.初始化空碗的数量为5&#xff0c;食物的数量为0&#xff1a…

中级课程——XSS

文章目录 介绍挖掘思路分类反射型存储型dom类型 介绍 挖掘思路 注入点&#xff1a;各种输入框 测试代码&#xff08;poc&#xff09;&#xff1a;js语句 分类 反射型 存储型 dom类型

势不可挡!新能源车型L2搭载率破50%,TOP20品牌数据出炉

中国乘用车市场正在走出去年的阴霾。 机构公开数据显示&#xff0c;2023年上半年中国乘用车市场产量1100.77万辆&#xff0c;同比增长7.5%&#xff1b;终端销量959.08万辆&#xff0c;同比增长4.7%&#xff1b;乘用车出口152.36万辆&#xff0c;同比增长87.6%。 在实际交付量…

[HDLBits] Exams/m2014 q4g

Implement the following circuit: module top_module (input in1,input in2,input in3,output out);assign out (!(in1^in2))^in3; endmodule

Java EE 突击 9 - Spring Boot 日志文件

Spring Boot 日志文件 学习目标一 . 日志有什么用1.1 日志格式说明 二 . 自定义日志打印2.1 得到日志对象2.2 使用日志对象提供的方法 , 输出自定义的日志内容2.3 日志的级别 三 . 日志持久化3.1 在配置文件里面设置日志名称3.2 设置日志的保存目录 四 . 日志级别的设置五 . 简…

【Linux 网络】NAT技术——缓解IPv4地址不足

NAT技术 NAT 技术背景NAT IP转换过程NAPTNAT 技术的缺陷 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;技术&#xff0c;是解决IP地址不足的主要手段&#xff0c;并且能够有效地避免来自网络外部的攻击&#xff0c;隐藏并保护网络内部的计算…

爬虫程序中使用爬虫ip的优势

作为一名爬虫技术员&#xff0c;我发现在爬虫程序中使用代理IP可以提升爬取效率和匿名性。今天&#xff0c;我就来详细讲解一下代理IP在爬虫程序中的工作原理及应用。 首先&#xff0c;我们来了解一下代理IP在爬虫程序中的工作原理。当我们使用爬虫程序进行数据采集时&#xf…

【雕爷学编程】Arduino动手做(200)---WS2812B幻彩LED灯带

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Android 开发者选项日志存储路径

android开发者选项中存在两个item是关于系统日志的。 1.日志记录器缓冲区大小 2.在设备上永久存储日志记录器数据 一个是用来设置缓冲区大小&#xff0c;一个是用来日志存储开关及过滤。 通过分析 system/core/logcat/logcatd.rc mkdir /data/misc/logd 0770 logd log 日志的…

AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门)

AWS——03篇&#xff08;AWS之Amazon S3&#xff08;云中可扩展存储&#xff09;-01入门&#xff09; 1. 前言2. 关于 Amazon S32.1 介绍2.1.1 简述2.1.2 详细介绍 2.2 Amazon S3 好处和功能2.3 3. 创建S3存储桶3.1 创建存储桶3.2 修改访问权限 4. 简单实用4.1 上传图片文件4.2…

keil5 watch数据一直为0不显示

调试遇到一个问题&#xff0c;以为是指针里面的数据&#xff0c;数组显示不出来&#xff0c;结果是main函数里面有个1s的延时&#xff0c;我的理解是watch刷新太慢了&#xff0c;一直掉进延时里面&#xff0c;所以我们把延时改到10ms就行了。

100ASK百问网 全志D1s/T113-s3开发板 适配ov5640教程

本实验采用百问网的100ASK_T113-PRO Base V1.1 &#xff0c; D1s也可以参考进行修改并适配。 本实验所需的文件&#xff08;含tina根文件系统、SD镜像、设备树、内核配置文件&#xff09;供大家对比参考&#xff1a;source.zip 1.硬件配置 查看百问网提供的T113开发板原理图1…

Vue2核心完整笔记

文章目录 [TOC](文章目录)前言1. vue2基础知识和原理1.1 初识Vue 和 Vue简介1.2 模板语法1.3 数据绑定1.4 el与data的两种写法1.5 Vue中的MVVM1.6 数据代理1.7 事件处理1.8 键盘事件1.9 计算属性1.10 监视属性1.11 绑定样式class样式style样式 1.12 条件渲染v-ifv-show 1.13 列…