Pandas数据结构之Series的使用


Posted in Python onMarch 31, 2022

一. Series 简介

Series是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象

Series 总的来说就是带标签的一维数组,可存储整数、浮点数、字符串、Python对象等类型的数据。标签轴通常叫做索引。

二. 实例化 Series

2.1 使用一维数组实例化

用一维数组实例化Series时,索引长度必须与数组长度一致。没有指定索引时,Pandas会帮我们创建默认的数值型索引。

In [1]: s1 = pd.Series([1, 2, 3, 4])
Out[1]:
0	1
1	2
2	3
3	4
dtype: int64

In [2]: s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
Out[2]:
a	1
b	2
c	3
d	4
dtype: int64

注意: Pandas 是支持重复索引的。但我们也可以重置索引,具体操作方法在后续章节中会给出。

2.2 使用字典实例化

使用字典实例化Series时, 如果未传入索引,则索引的值为字典的key:

In [1]: pd.Series({'i': 0, 'j': 1, 'k': 2})
Out[1]: 
i    0
j    1
k    2
dtype: int64

2.3 使用标量例化

使用标量值实例化时,必须提供索引。Series 按索引长度重复该标量值。

In [1]: pd.Series(6, index=[0, 1, 2])
Out[1]: 
0    6
1    6
2    6
dtype: int64

三.Series 简单使用

3.1 为Series添加Name属性

在实例化Series时,可以传入name参数为Series添加name属性。同时,Seires也支持重命名:

In [1]: s = pd.Series(6, index=[0, 1, 2], name='six')
Out[1]: 
0    6
1    6
2    6
Name: six, dtype: int64

In [2]: s.name
Out[2]: 'six'

In [3]: s = s.rename('sixsixsix')
In [4]: s.name
Out[4]: 'sixsixsix'

3.2 基于位置的切片

Series提供了类似于Python列表的切片方式:

In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s[0:2] 	#取下标为0和1的两个数据(不包括2,也就是从第一个开始取,取两个数据)
Out[1]:
a    1
b    2
dtype: int64

In[2]: s[:3] 	#取前三个数据
Out[2]:
a    1
b    2
c    3
dtype: int64

In[3]: s[-2:] 	#取最后两个数据(也可以理解为从倒查第二个数据一直取到末尾)
Out[3]:
c    3
d    4
dtype: int64

In[4]: s[[0,2,3]] 	#取第1、3、4这个三个数据(注意下标是从0开始的,转换为位置时需+1)
Out[4]:
a    1
c    3
d    4
dtype: int64		#注意:如果输入的位置大于列表的长度则会报出“indexers are out-of-bounds”异常

3.3 基于索引的切片

Series可使用索引标签的值来提取值:

In [0]:s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In [1]: s['a'] 	#提取s中,标签为a的值
Out[1]:
a    1
dtype: int64

In [1]: s[['a', 'b', 'c']] 	#提取s中,标签为a, b, c的值
Out[1]:
a    1
b    2
c    3
dtype: int64

如果传入的索引标签的值不在Seires的轴索引中,那将会报 KeyError 异常,这里建议大家使用Series的 get 方法获取值,如果不存在,则会返回None,同时也可设置default参数,用于不存在时的默认返回值。

In [0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In [1]: s['f'] 	#提取s中,标签为f的值, f不存在,将会报出异常
Out[1]:KeyError

In [2]:s.get('f') #提取s中,标签为f的值, 若f不存在,默认返回None
Out[2]:None

In [3]:s.get('f'. default=-1) #提取s中,标签为f的值, 若f不存在,返回-1
Out[3]:-1

3.4 基于条件的切片

In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s[s < 2] 	#提取s中,小于2的值
Out[1]:
a    1
b    2
dtype: int64

In[1]: s[s> s.mean()] 	#提取s中,大于平均数的值
Out[1]:
c    3
d    4
dtype: int64

In[1]: s[s.between(1, 3, inclusive=False)] 	#提取s中,值介于1,3之间的数据(不包含1,3)
Out[1]:
b    2
dtype: int64

在提取区间数据时,如果想让两端的值包含其中(满足两端的值也被提取出来),只需要把 inclusive 参数的值赋为True

3.5 其他操作

Series 不用循环也可以像操作单个数值一样快速进行数学运算:

In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s + s
Out[1]:
a    2
b    4
c    6
d    8
dtype: int64

In[2]: s - 1
Out[2]:
a    0
b    1
c    2
d    3
dtype: int64

Series 之间的操作会自动 基于标签 对齐数据. 如果一个Series中的标签在另一个Series中不存在,那么计算得到的结果将是NaN,即缺失值,有缺失值NaN的处理在后续章节也会讲到。因此,我们不用顾及执行操作的Series是否有相同的标签。 Pandas数据结构集成的数据对齐的功能,是Pandas区别于大多数标签型数据处理工具的重要特性。

In[0]: s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[0]: s2 = pd.Series([3, 6, 11], index=['a', 'b', 'f'])
In[1]: s1 + s2
Out[1]:
a   4.0
b   8.0
c   NaN
d   NaN
f   NaN
dtype: float64

到此这篇关于Pandas数据结构之Series的使用的文章就介绍到这了,更多相关Pandas Series使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用python编写一个图片主色转换的脚本
Dec 07 Python
设置python3为默认python的方法
Oct 31 Python
Python OpenCV实现视频分帧
Jun 01 Python
pandas DataFrame索引行列的实现
Jun 04 Python
python绘制地震散点图
Jun 18 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
python搜索算法原理及实例讲解
Nov 18 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 Python
python获取字符串中的email
Mar 31 #Python
Python利用FlashText算法实现替换字符串
详解Python flask的前后端交互
Mar 31 #Python
ubuntu安装jupyter并设置远程访问的实现
Python中time与datetime模块使用方法详解
Mar 31 #Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 #Python
Python利用zhdate模块实现农历日期处理
Mar 31 #Python
You might like
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
Mootools 1.2教程 类(一)
2009/09/15 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
python中set常用操作汇总
2016/06/30 Python
简单了解python反射机制的一些知识
2019/07/13 Python
Python 必须了解的5种高级特征
2020/09/10 Python
基于Python实现天天酷跑功能
2021/01/06 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
项目资料员岗位职责
2013/12/10 职场文书
风险评估实施方案
2014/03/09 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python