pandas 的核心是 Series 和 DataFrame 两大数据结构,数据分析相关的所有事务都是围绕着这两种结构进行的。其中,Series 数据结构用于存储一个序列的一维数组,而 DataFrame 数据结构则用于存储复杂数据的二维数据结构。

虽然这些数据结构不能解决所有的问题,但它们为大多数应用提供了有效且强大的工具,就简洁性而言,理解和使用它们都很简单。此外,很多更为复杂的数据结构都可以追溯到这两种结构。本节教程就对这两种结构中的 Series 重点介绍。

Series 是一种类似于一维数组的对象,它是由一组数据(可以是 NumPy 中任意类型的数据)以及一组与之相关的数据标签组成的。Series 对象的内部结构是由两个相互关联的数组组成的,其中用于存放数据(即值)的是 value 主数组,主数组的每个元素都有一个与之相关联的标签(即索引),这些标签存储在另外一个叫作 Index 的数组中。

Series 的表现形式为:索引在左边,值在右边。例如,Series 对象 [2,4,-3,7] 的内部结构如图 1 所示。

图 1:Series 内部结构

1. 创建 Series 对象

1) 通过 Series() 构造函数创建

创建 Series 对象的 Series() 构造函数如下:

pandas.Series(data[, index])

函数中的参数说明如下:

data 是输入给 Series 构造器的数据,它可以是 NumPy 中任意类型的数据;

index 是 Series 对象中数据的标签(即索引)。

创建过程:调用 Series() 构造函数,把要存放在 Series 对象中的数据以数组形式传入,就能创建一个 Series 对象。例如,在 Jupyter Notebook 下输入下列代码:

In [1]: import pandas as pd

In [2]: se1 = pd.Series([2,4,-3,7])

此代码声明了一个 Series 对象 se1,输出 se1,可见左边是标签,右边是标签对应的元素。

In [3]: se1

Out[3]: 0 2

1 4

2 -3

3 7

dtype:int64

声明 Series 时,若不指定标签,pandas 默认使用从 0 开始依次递增的数值作为标签,此时,标签与 Series 对象中元素的索引(在数组中的位置)是一致的。

但是,如果想对各个数据使用有特定意义的标记(标签),就必须在调用 Series()构 造函数时,指定 index 选项,把存放有标签的数组赋值给 index。例如,设置标签的 Series 声明如下:

In [4]: se2 = pd.Series([2,4,-3,7],index=['b','c','a','d'])

In [5]: se2

Out[5]: b 2

c 4

a -3

d 7

dtype: int64

2) 用 NumPy 数组或其他 Series 对象定义新的 Series 对象

① 用 NumPy 数组定义新的 Series 对象代码如下:

In [6]: import numpy as np

In [7]: arr = np.array([2,3,4,5])

In [8]: se3 = pd.Series(arr)

In [9]: se3

Out[9]: 0 2

1 3

2 4

3 5

dtype: int32

② 用其他 Series 对象定义新的 Series 对象命令如下:

In [10]: se4 = pd.Series(se2)

In [11]: se4

Out[11]: b 2

c 4

a -3

d 7

dtype: int64

注意:利用这两种方法创建的新 Series 对象中的元素不是原 NumPy 数组或 Series 对象元素的副本,而是对它们的引用。也就是说,这些对象是动态插入到新 Series 对象中的。如改变原有对象元素的值,新 Series 对象中这些元素也会发生变化。

3) 将字典转换为 Series 对象

如果数据存放在字典中,字典中的一个键与值的映射关系,可以被看成是 Series 对象中的索引值到数据值的一个映射,因此,可以将字典直接转换为 Series 对象。

In [12]: s_data = {'s_number':20171010, 'Normal':86, 'exam':90}

In [13]: se5 = pd.Series(s_data)

In [14]: se5

Out[14]: s_number 20171010

Normal 86

exam 90

dtype: int64

注意:将字典直接转换为 Series 对象,当字典中值发生变化时,转换为 Series 对象中的元素不会变化。同样,也可以将 Series 对象转换成字典。

2. 查看 Series 值和标签

通过 Series 的属性 values 和 index 可查看值和标签。

例如:se2.values 查看值和 se2.index 查看标签。

3. 选择内部元素

Series 索引的工作方式类似于 NumPy 数组的索引,只不过 Series 的索引值不只是整数。

1) 选择单个元素

若想获取 Series 对象的内部元素,把它看成普通的 NumPy 数组,指定索引即可。例如,se1[2] 获取元素是 -3。

或者指定位于索引位置处的标签。例如,se2['a'] 获取的元素也是 -3。

2) 选择多个元素

通过 Series 索引的切片来选择多个元素时,切片“[起始值:终止值:步长]”所指定的元素是不包含终止值的元素,如没有指定终止值,则终止值是包含 Series 最后索引的元素。

In [15]: se1[0:2]

Out[15]: 0 2

1 4

dtype: int64

或者可以使用元素对应的标签,只不过要把标签放在数组中。

In [16]: se2[['a','d']]

Out[16]: a -3

d 7

dtype: int64

如利用标签的切片来选择多个元素时,切片“[起始标签:终止标签]”所指定的元素是包含终止标签的元素,如果没有指定终止标签,则终止标签是包含 Series 最后标签的元素。

In [17]: se6 = pd.Series([1,2,3,4],index=['a', 'b', 'c', 'd'])

In [18]: se6['b':'c']

Out[18]: b 2

C 3

dtype: int64

4. 给元素赋值

通过索引或标签选取元素后直接进行赋值。例如,se1[1]=1 或 se2['a']=0。

5. Series 对象的简单运算

pandas 库开发是以 NumPy 库为基础的,从数据结构而言,NumPy 数组中的许多操作都会保留到 Series 对象中,如根据条件筛选数据。还有适用于 NumPy 数组的算术运算符( +、-、*、/ )和其他数学函数等,也适用于 Series 对象。

1) 筛选元素

筛选元素就是根据条件筛选数据结构中的元素。例如,筛选 se1 中大于 3 的元素。

In [19]: se1[se1>3]

Out[19]: 1 4

3 7

dtype: int64

2) 算术运算和数学函数

例如:se1*2、np.exp(se1)。

6. Series 对象之间的运算

在 Series 对象之间进行运算时,Series 能够通过识别标签对齐不一致的数据。这就是 Series 运算时的自动对齐功能。例如,将 se1 与 se1[se1>3] 相加,其结果如下:

In [20]: se1 += se1[se1>3]

In [21]: se1

Out[21]: 0 NaN

1 8.0

2 NaN

3 14.0

dtype: float64

通过上述计算得到了一个新 Series 对象,其中只对标签相同的元素求和,其他只属于各自的 Series 对象的标签也被添加到新对象中,只不过它们的值为 NaN。

7. NaN

一般来讲,NaN 表示数据有问题,必须对其进行处理,尤其是在数据分析时。从某些数据源抽取数据时遇到了问题,甚至是数据源缺失数据时,往往会产生这类数据。另外,在执行计算和函数运算时也会遇到这类数据。有关 NaN 数据的处理方法以后我们将进行介绍。

尽管 NaN 值是在数据有问题时产生的,但在 pandas 中是可以定义这种类型的数据的,并将它添加到 Series 等数据结构中。在创建数据结构时,可以为数组中元素缺失的项输入 np.NaN。

8. 统计 Series 对象的组成元素

Series 对象往往包含重复元素,因此,统计元素重复出现的次数和判断元素是否存在 Series 对象中是常用的操作。

1)  统计元素重复出现的次数

统计 Series 对象包含多少个不同的元素,可使用 unique() 函数返回一个由 Series 去重后的元素所组成的数组,但是数组中元素的顺序不会自动排序。

In [22]: se = pd.Series([5,1,4,1,2,2])

In [23]: se.unique()

Out[23]: array([5, 1, 4, 2], dtype=int64)

另外,还有一个 value_counts() 函数,它不仅能返回各个不同的元素,而且还能计算每个元素在 Series 中的出现次数。运行结果中左边是元素,右边是元素出现的次数。

In [24]: se.value_counts()

Out[24]: 2 2

1 2

5 1

4 1

dtype: int64

2) 判断元素是否存在

使用 isin() 函数可以判断给定的一列元素是否包含在 Series 数据结构中,如果给定的元素包含在数据结构中,isin() 函数返回是 True,否则返回是 False。利用此函数可以筛选 Series 或 DataFrame 列中的数据。

In [25]: se.isin([0,2])

Out[25]: 0 False

1 False

2 False

3 False

4 True

5 True

dtype: bool

python pandas series想赋予新的值_pandas Series对象创建及常用操作相关推荐

  1. 如何创建一个Python Pandas的DataFrame变量,如何给一个DataFrame对象添加新的一行数据?

    如何给一个Python Pandas的DataFrame对象添加新一行数据? 1.如何创建一个新的dataframe变量. 1) 创建一个没有列名的dataframe变量:df = pd.DataFr ...

  2. pandas 过滤某一列的值_Pandas学习笔记,如何用列的值过滤行

    通过tushare引入DataFrame d = ts.get_hist_data('600848', start='2015-01-05', end='2015-01-09') data=pd.Da ...

  3. python pandas 读取excel单元门公式值_Python pandas对excel的操作实现示例

    最近经常看到各平台里都有Python的广告,都是对excel的操作,这里明哥收集整理了一下pandas对excel的操作方法和使用过程.本篇介绍 pandas 的 DataFrame 对列 (Colu ...

  4. python 对xlsx文件数根据日期进行统计分析_Python处理Excel的常用操作(一)

    最近一直忙着学习和写开题报告,都没有时间更文了,今天偷偷来休闲一下. 很多人一开始学习python,就是看到了很多关于python能够快速处理和解决表格的广告,于是便有了今天的分享.我主要利用pand ...

  5. python字典数据类型笔记_python笔记2-数据类型:元组、字典常用操作

    元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tp=(1,2,3,'a','b' ...

  6. redis常用操作2, redis操作键值, redis安全设置

    string数据 127.0.0.1:6379> setnx k1 888 #键存在,setnx检测到,不会覆盖: (integer) 0 127.0.0.1:6379> get k1 & ...

  7. python索引取值_对pandas的层次索引与取值的新方法详解

    1.层次索引 1.1 定义 在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引. 通过层次化索引,pandas能够以较低维度形式处理高纬度的数据 通过层次化索引,可以按照层次统计数据 层次 ...

  8. python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...

    1. 数据文件 2. 读数据 import pandas as pd data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv') print(data ...

  9. Python——pandas模块—Series数据结构

    Python--pandas模块-Series数据结构 Python--pandas模块-Series数据结构 pandas Series 创建Series 没有指定索引列时,自动创建:0~~(N-1 ...

最新文章

  1. 智能车竞赛技术报告 | 电磁越野组 - 哈尔滨工业大学 - 紫丁香三队
  2. pthon3精要(12)-扩展序列解包
  3. 20169217 《Linux内核原理与分析》第七周作业
  4. linux系统怎么安装pr,Linux安装后的配置
  5. Linux命令【四】文件+虚拟内存+常用系统函数
  6. SIAM International Conference on Data Mining, SDM 会议怎么样?
  7. 纯前端播放文件流视频并预览并截取视频第一帧
  8. Ubuntu傻瓜式录制GIF图—— Peek
  9. pr基础操作与快捷键(基于pr cc 2017)
  10. BZOJ 2339 [HNOI2011]卡农
  11. Operator 基础原理和概念
  12. 药方的量化方法笔记(学习与尝试):第二回 第一次 药方的拆解 量化方法的形式的发展 对药的量化分析
  13. 27年台湾珍珠鲜奶茶品牌Sharetea将引进上海
  14. 从0开始Go语言,用Golang搭建网站
  15. Nginx的介绍与使用
  16. php select下拉框,下拉框处理(select)
  17. 洛谷P1914 小书童——凯撒密码
  18. ACL2022论文分类汇总-Prompt、句子表征、检索排序摘要
  19. 阿里YunOS推开放平台 提高开发者体验
  20. 图片轮播图之手风琴特效

热门文章

  1. 干掉“我的电脑”中超级解霸V8的图标
  2. 帝国cms 调用指定栏目 名称 链接 别名
  3. C# Winform软件多语言(汉语、英语。。。)界面的切换,低耦合 - 转
  4. 支持用户将文件从一台计算机,2016年职称计算机考试WindowsXP冲刺试题(5)
  5. mysql删除表主键约束_MySQL添加约束
  6. linux 清空apt,清除ubuntu apt-get 缓存
  7. 输油管道问题(线性时间解决)
  8. 美度舵手系列多功能计时腕表伴你行走世界
  9. Golang常用工具类库
  10. 图像平移 ——MATLAB实现