Pandas是基于NumPy构建的一个非常常用也非常好用的库,正如名字一样,国宝嘛是很受欢迎的!它含有使数据分析工作变得更快更简单的高级数据结构和操作工具。

基本数据结构

Pandas有两种自己独有的基本数据结构。不过我们要知道的是,pandas它固然有着两种数据结构,因为它依然是Python的一个库,所以Python中有的数据类型在这里依然适用,也同样还可以使用类来自定义数据类型。只不过Pandas里面定义的两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。

在使用Pandas的代码中,我们一般使用下面这样的pandas引入约定:

from pandas import Series, DateFrame
import pandas as pd

因此,只要你在代码中看到’pd.’,就得想到这是pandas。因为Series和DataFrame使用的次数非常多,所以将其引入命名空间会更加方便。

Series

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series: Series的字符串表现形式为:索引在左边,值在右边(其实我们可以理解为立着的list)。由于我们没有为数据指定索引,于是会自动创建一个0到N1(N为数据的长度)的整数型索引。你可以通过Series 的values和index属性获取其数组表示形式和索引对象: 通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引: 与普通NumPy数组相比,你可以通过索引的方式选取和修改Series中的单个或一组值: 到这里是不是感觉有点像字典?没错,它确实是一个字典。我们来看下面定义: 这时候,我们依然可以自定义索引。Pandas的优势在这里体现出来,如果自定义了索引,自定的索引会自动匹配原来的索引,如果匹配成功,就取原来索引对应的值,这个可以简称为“自动对齐”。 这里“Java”没有对应的值与之匹配,所以其结果就为NaN(即“非数字”(not a number),在pandas中,它用于表示缺失或NA值)。pandas的isnull和notnull函数可用于检测缺失数据: Series也有类似的实例方法: 对于许多应用而言,Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。 Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:

DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。它非常近似一个电子表格。

构建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典: 如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列: 跟Series一样,如果传入的列在数据中找不到,就会产生NAN值: 通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series,也就是说DataFrame的一列其实就是一个Series: 注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。当然,行也可以通过位置或名称的方式进行获取,例如用索引字段ix: 列可以通过赋值的方式进行修改。例如,我们可以给那个空的”score”列赋上一个标量值或一组值: 将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值: 关键字del用于删除列: 另一种常见的数据形式是嵌套字典(也就是字典的字典),它也可以用来构建DataFrame,如果将它传给DataFrame,它就会被解释为:外层字典的键作为列,内层键则作为行索引: 下面列出了DataFrame构造函数所能接受的各种数据。

类型 说明
二维ndarray 数据矩阵,还可以传入行标和列表
由数组、列表或元组组成的字典 每个序列会变成DataFrame的一列,所有序列的长度必须相同
NumPy的结构化/记录数组 类似于“由数组组成的字典”
由Series组成的字典 每个Series会成为一列,如果没有显式指定索引,则各Series的索引会被合并成结果的行索引
字典或Series的列表 各内层字典会成为一列,键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样
字典或Series的列表 各项将会成为DataFrame的一行,字典键或Series索引的并集将会成为DataFrame的列标
由列表或元组组成的列表 类似于“二维ndarray”
其它DataFrame 该DataFrame的索引将会被沿用,除非显式指定了其他索引
Numpy的MaskedArray 类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会成NAN/缺失值