pandas | 使用pandas进行数据处理——Series篇
本文始发于个人公众号:TechFlow,原创不易,求个关注
上周我们关于Python中科学计算库Numpy的介绍就结束了,今天我们开始介绍一个新的常用的计算工具库,它就是大名鼎鼎的Pandas。
Pandas的全称是Python Data Analysis Library,是一种基于Numpy的科学计算工具。它最大的特点就是可以像是操作数据库当中的表一样操作结构化的数据,所以它支持许多复杂和高级的操作,可以认为是Numpy的加强版。它可以很方便地从一个csv或者是excel表格当中构建出完整的数据,并支持许多表级别的批量数据计算接口。
安装使用
和几乎所有的Python包一样,pandas也可以通过pip进行安装。如果你装过Anaconda套件的话,那么像是numpy、pandas等库已经自动安装好了,如果没有安装过也没有关系,我们使用一行命令即可完成安装。
pip install pandas
和Numpy一样,我们在使用pandas的时候通常也会给它起一个别名,pandas的别名是pd。所以使用pandas的惯例都是:
import pandas as pd
如果你运行这一行没有报错的话,那么说明你的pandas已经安装好了。一般和pandas经常一起使用的还有另外两个包,其中一个也是科学计算包叫做Scipy,另外一个是对数据进行可视化作图的工具包,叫做Matplotlib。我们也可以使用pip将这两个包一起安装了,在之后的文章当中,用到这两个包的时候,也会简单介绍一下它们的用法。
pip install scipy matplotlib
Series 索引
在pandas当中我们最常用的数据结构有两个,一个是Series另外一个是DataFrame。其中series是一维数据结构,可以简单理解成一维数组或者是一维向量。而DataFrame自然就是二维数据结构了,可以理解成表或者是二维数组。
我们先来看看Series,Series当中存储的数据主要有两个,一个是一组数据构成的数组,另外一个是这组数据的索引或者是标签。我们简单创建一个Series打印出来看一下就明白了。
这里我们随意创建了一个包含四个元素的Series,然后将它打印了出来。可以看到打印的数据一共有两列,第二列是我们刚才创建的时候输入的数据,第一列就是它的索引。由于我们创建的时候没有特意指定索引,所以pandas会自动为我们创建行号索引,我们可以通过Series类型当中的values和index属性查看到Series当中存储的数据和索引:
这里输出的values是一个Numpy的数组,这并不奇怪,因为我们前面说了,pandas是一个基于Numpy开发的科学计算库,Numpy是它的底层。从打印出来的index的信息当中,我们可以看到这是一个Range类型的索引,它的范围以及步长。
索引是Series构建函数当中的一个默认参数,如果我们不填,它默认会为我们生成一个Range索引,其实也就是数据的行号。我们也可以自己指定数据的索引,比如我们在刚才的代码当中加入index这个参数,我们就可以自己指定索引了。
当我们指定了字符类型的索引之后,index返回的结果就不再是RangeIndex而是Index了。说明pandas内部对数值型索引和字符型索引是做了区分的。
有了索引,自然是用来查找元素用的。我们可以直接将索引当做是数组的下标使用,两者的效果是一样的。不仅如此,索引数组也是可以接受的,我们可以直接查询若干个索引的值。
另外在创建Series的时候,重复的索引也是允许的。同样当我们使用索引查询的时候也会得到多个结果。
不仅如此,像是Numpy那样的bool型索引也依然是支持的:
Series计算
Series支持许多类型的计算,我们可以直接使用加减乘除操作对整个Series进行运算:
也可以使用Numpy当中的运算函数来进行一些复杂的数学运算,但是这样计算得到的结果会是一个Numpy的array。
因为Series当中有索引,所以我们也可以使用dict的方式判断索引是否在Series当中:
Series有索引也有值,其实和dict的存储结构是一样的,所以Seires也支持通过一个dict来初始化:
通过这种方式创建出来的顺序就是dict当中key存储的顺序,我们可以在创建的时候指定index,这样就可以控制它的顺序了。
我们在指定index的时候额外传入了一个没有在dict当中出现过的key,由于在dict当中找不到对应的值,Series会将它记成NAN(Not a number)。可以理解成是非法值或者是空值,在我们处理特征或者是训练数据的时候,经常会遇到存在一些条目的数据的某个特征空缺的情况,我们可以通过pandas当中isnull和notnull函数检查空缺的情况。
当然Series当中也有isnull的函数,我们也可以调用。
最后,Series当中的index也是可以修改的, 我们可以直接给它赋上新值:
总结
从核心本质上来说,pandas当中的Series就是在Numpy一维数组上做的一层封装,加上了索引等一些相关的功能。所以我们可以想见DataFrame其实就是一个Series的数组的封装,加上了更多数据处理相关的功能。我们把核心结构把握住了,再来理解整个pandas的功能要比我们一个一个死记这些api有用得多。
pandas是Python数据处理的一大利器,作为一个合格的算法工程师几乎是必会的内容,也是我们使用Python进行机器学习以及深度学习的基础。根据调查资料显示,算法工程师日常的工作有70%的份额投入在了数据处理当中,真正用来实现模型、训练模型的只有30%不到。因此可见数据处理的重要性,想要在行业当中有所发展,绝不仅仅是学会模型就足够的。
文章就到这里,如果喜欢本文,可以的话,请点个关注,给我一点鼓励,也方便获取更多文章。
本文使用 mdnice 排版
pandas | 使用pandas进行数据处理——Series篇的更多相关文章
- pandas数组(pandas Series)-(4)NaN的处理
上一篇pandas数组(pandas Series)-(3)向量化运算里说到,将两个 pandas Series 进行向量化运算的时候,如果某个 key 索引只在其中一个 Series 里出现,计算的 ...
- Pandas系列(一)-Series详解
一.初始Series Series 是一个带有 名称 和索引的一维数组,既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数.浮点.字符串.Python对象等. ...
- pandas数组(pandas Series)-(5)apply方法自定义函数
有时候需要对 pandas Series 里的值进行一些操作,但是没有内置函数,这时候可以自己写一个函数,使用 pandas Series 的 apply 方法,可以对里面的每个值都调用这个函数,然后 ...
- pandas数组(pandas Series)-(2)
pandas Series 比 numpy array 要强大很多,体现在很多方面 首先, pandas Series 有一些方法,比如: describe 方法可以给出 Series 的一些分析数据 ...
- pandas数组(pandas Series)-(1)
导入pandas import pandas as pd countries = ['Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Ba ...
- pandas模块(数据分析)------Series
pandas是一个强大的Python数据分析的工具包. pandas是基于NumPy构建的. pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成时间序列功能 提供丰 ...
- 小白学 Python 数据分析(3):Pandas (二)数据结构 Series
在家为国家做贡献太无聊,不如跟我一起学点 Python 顺便问一下,你们都喜欢什么什么样的文章封面图,老用这一张感觉有点丑 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析( ...
- Pandas初体验之数据结构——Series和DataFrame
Pandas是为了解决数据分析任务而创建的,纳入了大量的库和标准数据模型,提供了高效地操作大型数据集所需的工具. 对于Pandas包,在Python中常见的导入方法如下: from pandas im ...
- Pandas之:Pandas高级教程以铁达尼号真实数据为例
Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...
随机推荐
- Java实现算法提高十进制数转八进制数
算法提高 十进制数转八进制数 时间限制:1.0s 内存限制:512.0MB 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. ...
- Java实现 蓝桥杯VIP 基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
- Java实现 蓝桥杯VIP 算法训练 打印下述图形
算法训练 4-1打印下述图形 时间限制:1.0s 内存限制:256.0MB 问题描述 使用循环结构打印下述图形,打印行数n由用户输入.打印空格时使用"%s"格式,向printf函数 ...
- Java实现蓝桥杯G将军
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加队员 ...
- Java实现 洛谷 P1035 级数求和
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ...
- RocketMQ系列(二)环境搭建
RocketMQ的基本概念在上一篇中给大家介绍了,这一节将给大家介绍环境搭建.RocketMQ中最基础的就是NameServer,我们先来看看它是怎么搭建的. NameServer RocketMQ要 ...
- 算法讲堂二:组合数学 & 概率期望DP
组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...
- Jenkins job docker 没有权限
问题描述 基于docker使用jenkins 构建cicd,在执行docker build 的时候出现了权限的问题.具体报错如下 + REPOSITORY=10.0.0.100/library/wen ...
- 05-Python基础4
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- 我去,你竟然还不会用 Java final 关键字
写一篇文章容易吗?太不容易了,首先,需要一个安静的环境,这一点就非常不容易.很多小伙伴的办公室都是开放式的,非常吵,况且上班时间写的话,领导就不高兴了:只能抽时间写.其次,环境有了,还要有一颗安静的心 ...