序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的。

序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列时,只需要设置一个索引。pandas自动为序列创建了一个从0开始到N-1的序号,称作行的下标,行的位置。可以显式设置index参数,为每行设置标签,pandas把标签称作索引。用户可以通过索引、也可以通过位置来访问Series对象中的元素。

序列可以看作是索引到数据值的一个映射,一个索引对应一个数据值,这种结构就是有序的字典。

一,创建序列

序列的构造函数定义是:

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)

构造函数的参数:

  • data:传递给序列的数据,可以是ndarray、list或字典
  • index:设置轴的索引,索引值的个数与data参数的长度相同。如果没有设置index参数,那么默认值是 np.arange(n),或者 RangeIndex (0, 1, 2, …, n)。
  • dtype:设置序列元素的数据类型,如果没有设置,那么将推断数据类型
  • name:序列是一个多行的结构,name是序列的名称
  • copy:复制数据,默认值是false

索引的下标是自动生成的,从0开始,加1递增。对于序列的data,可以通过序列的属性values来访问;对于序列的索引,可以通过序列的属性index来访问。

1,使用ndarray或list创建序列

使用ndarray的一维数组,或者list来构造序列,序列包含两部分:索引和序列值,如下所示

>>> data=np.array(['a','b']) # data=['a','b']
>>> sd=pd.Series(data)
0 a
1 b
dtype: object

分析序列的输出:

最左侧的0和1是行索引,a和b是数据值。

在构造序列时,如果没有传递index参数,默认情况下,pandas分配了从 0 到  len(data)-1  的索引。

显式传递index参数

在构造函数中传递自定义的索引列表,索引的长度必须和data的长度相同,如下所示:

>>> sd=pd.Series(data,index=[101,102])
101 a
102 b
dtype: object

显式设置序列的name和index的name

序列是一维数组,只有一个维度,那就是row,在序列中为Index命名就是设置行轴的名称。

>>> sd=pd.Series(data=['a','b'],index=pd.Index([101,102],name='idx_name'),name='series_name')
idx_name
101 a
102 b
Name: series_name, dtype: object

序列看起来像多行一列的数据集,但是他们之间有本质的区别,多行一列是二维数组,有行名称和列名称,需要使用两个索引值来访问单个cell的数据,而序列只需要一个索引就可以访问元素值。

3,从字典构造序列

通过字典来创建Series,字典的key作为序列的索引标签,value作为对应Key的数据值:

>>> sdata = {'b': 12, 'a': 13}
>>> spd.Series(sdata)
b 12
a 13
dtype: int64

通过字典构建的序列,索引是标签(字符类型)。

二,序列的属性

序列对象包含的属性:

  • index:序列的索引
  • shape:序列的形状,表示各个维度的数量
  • array:把序列的数据值转换为Pandas数组
  • values:把序列的数据值转换为numpy数组
  • dtype:序列元素的数据类型
  • hasnan:序列是否包含nan
  • is_unique:序列的元素是否是唯一的

1,序列的索引

>>> sd.index
Int64Index([101, 102], dtype='int64', name='idx_name')

2,序列的shape

>>> sd.shape
(2,)

3,序列的PandasArray或ndarray数组

>>> sd.array
<PandasArray>
['a', 'b']
Length: 2, dtype: object
>>> sd.values
array(['a', 'b'], dtype=object)

三,序列数据的转换

转换序列数据值的类型:

Series.astype(self, dtype, copy=True, errors='raise', **kwargs)

把序列转换为NumPy数组:

Series.to_numpy(self, dtype=None, copy=False)

把序列转换为list:

Series.to_list(self)

四,访问序列的元素

序列元素的访问,可以通过索引和行标签,索引标签是在构造函数中通过index参数传递或构造的,而索引值(也可以称作序列的下标)是默认生成的,第一个元素的下标值是0,依次加1递增。

1,通过索引来访问序列

对于序列,通过索引来访问序列元素的格式是:Sereis[index],索引可以是整数,也可以是字符类型的标签:

>>> sd[102]
'b'

通过属性来访问序列的元素值

2,at和iat属性,用于访问序列的单个元素值

at属性通过索引访问单个序列值

>>> sd.at[102]
'b'

iat属性表示通过位置访问序列的单个元素值:

>>> sd.iat[0]
'a'

3,loc和iloc,通过序列的位置来访问元素

iloc:基于整数位置的索引,用于按位置选择序列元素

  • 单个位置索引,比如sd.iloc[1]
  • 位置索引的列表,比如 sd.iloc[[0,1]]
  • 整数序列,比如,sd.iloc[0:2]
  • 布尔值数组,sd.iloc[[True, False, True, False]]

loc:通过索引标签和布尔值数组来选择序列的元素

举个例子,通过整数位置来选择序列的元素:

>>> sd.iloc[0:2]
idx_name
101 a
102 b
Name: series_name, dtype: object

举个例子,通过索引的标签来选择序列的元素:

>>> sd.loc[[101,102]]
idx_name
101 a
102 b
Name: series_name, dtype: object

4,通过位置掩码(布尔索引数组)来访问序列的元素

在上面的例子中,[101,102] 称作索引数组,如果索引数据的元素类型是布尔类型,并且索引数组的元素数量和序列相同,那么把这种索引数组称作位置掩码。当位置为True时,表示选择该元素;当位置为False,表示不选择该元素。

>>> sd.loc[[True,False]]
idx_name
101 a
Name: series_name, dtype: object

5,获得懒惰迭代器

可以通过序列的__iter__()函数获得值的迭代器,也可以通过items()或iteritems()函数获得包含索引和值的元组的迭代器:

Series.__iter__(self)    #Return an iterator of the values.
Series.items(self) #Lazily iterate over (index, value) tuples.
Series.iteritems(self) #Lazily iterate over (index, value) tuples.

例如,通过items()函数获得序列的迭代器,并通过for循环来打印序列的值

>>> for t in sd.items():
... print(t)
...
('b', 12)
('a', 13)
('d', 14)
('c', 10)

五,序列的条件索引

按照条件选择序列的特定行,可以使用序列的loc或iloc属性,并使用布尔索引来筛选序列的数据行:

>>> sd.loc[sd>12]
a 13
d 14
dtype: int64

也可以使用逻辑表达式对条件进行组合计算:

>>> sd.loc[(sd>12) & (sd<14)]
a 13
dtype: int64
>>> sd.loc[(sd>12) | (sd<14)]
b 12
a 13
d 14
c 10
dtype: int64

注意,必须用小括号把两个逻辑表达式括起来,不然会报错:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

查看序列的逻辑表达式的值:

>>> (sd>12) & (sd<14)
b False
a True
d False
c False
dtype: bool

六,序列的基本操作

1,删除元素的元素

根据行标签删除制定的元素

Series.drop(self, labels=None)

2,对序列元素执行条件查询

如果序列元素的值满足cond条件,返回other的值;如果不满足,返回元素的值。

Series.where(self, cond, other=nan, inplace=False)

3,把序列追加到一个序列末尾

把to_append序列追加到序列的末尾,设置ignore_index表示忽略原始序列的索引,重新创建一个索引:

Series.append(self, to_append, ignore_index=False, verify_integrity=False)

4,重索引

重索引是指按照新的索引对序列的元素进行重新排列,如果某个索引值不存在,就形成一个空洞,默认情况下,在空洞处插入缺失值:

Series.reindex(self, index=None, **kwargs)

参数 **kwargs 表示数据不固定的参数,其中有:

method:表示插补缺失值的方法,有效值有{None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}

  • None 表示插入缺失值nan
  • ‘backfill’/’bfill’:表示使用空洞之后的最近的有效值来填充
  • ‘pad’/’ffill’:表示使用空洞之前的最近的有效值来填充
  • ‘nearest’:表示使用最靠近空洞的有效值来填充

fill_value:填充的值,默认值是nan

参考文档:

pandas Series

pandas 学习 第2篇:Series -(创建,属性,转换和索引)的更多相关文章

  1. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  2. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  3. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  4. pandas 学习 第1篇:pandas基础 - 数据结构和数据类型

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...

  5. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  6. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

  7. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  8. pandas 学习 第十一篇:处理缺失值

    Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...

  9. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

随机推荐

  1. 2019-2020-1 20199305《Linux内核原理与分析》第八周作业

    可执行程序的工作原理 (一)ELF目标文件 (1)什么是ELF? 这里先提一个常见的名词"目标文件",是指编译器生成的文件.ELF(Executable and Linkable ...

  2. MySql索引背后的数据结构及算法

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

  3. Docker安装ELK

    1.下载elk docker pull sebp/elk 2.启动elk //Elasticsearch至少需要单独2G的内存 //增加了一个volume绑定,以免重启container以后ES的数据 ...

  4. 关于HACLON程序导出C#程序,运行报错解决方法

    摘要:一些环境配置异常的解决方法. 一,打不开相机: 1.打开系统高级设置--环境变量中是否有 HALCONROOT+安装目录名,若无进行添加. 2.关闭计算机其他连接相机的软件,例如海康的MVS,H ...

  5. 在Windows下配置多个git账号

    1.生成并部署SSH key 安装好Git客户端后,打开git bash,输入以下命令生成user1的SSH Key: ssh-keygen -t rsa -C "user1@email.c ...

  6. java基础(4):引用数据类型、流程控制语句

    1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...

  7. 40-用 volume container 共享数据

    volume container 是专门为其他容器提供 volume 的容器.它提供的卷可以是 bind mount,也可以是 docker managed volume.下面我们创建一个 volum ...

  8. 树莓派 raspbian Linux 系统命令行 快捷键

    在 Linux 下使用命令操作的时候,光标的移动令人头痛.命令输入完了,执行之后发现缺少权限,然后不得不移动光标到行首加 sudo,而命令又极长……当我学会了命令行相关的快捷键之后,不仅效率提高了,更 ...

  9. EXPDP导数报ORA-00942案例

    使用数据泵(expdp)导数时遇到了ORA-31626 & ORA-00942 错误,数据库版本为Oracle Database 10g Release 10.2.0.5.0,具体错误如下所示 ...

  10. Undo 相关的等待事件和已知问题 (Doc ID 1575701.1)

    Undo Related Wait Events & Known Issues (Doc ID 1575701.1) APPLIES TO: Oracle Database - Enterpr ...