pandas 数据结构介绍
一、pandas 基础数据结构
1、pandas 中主要有两种数据结构:Series 和 DataFrame。
2、Series:一种一维的数组型对象,它包含了一个值序列(与 NumPy 中的类型相似),并且包含了数据标签,称为索引(index)。最简单的序列可以仅仅由一个数组组成。注意:Series 中的索引值是可以重复的。
3、DataFrame:表示矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被视为一个共享相同索引的 Series 的字典。在 DataFrame 中,数据被存储为一个以上的二维块,而不是列表、字典或其他 一维数组的集合。
二、Series
1、由一个数组数据产生简单的 Series 对象
交互式环境中 Series 的字符串表示,索引在左边,值在右边。由于我们不为数据指定索引,默认生成的索引是从 0 到 N-1(N是数据的长度)。
通过 values 属性和 index 属性分别获得 Series 对象的值和索引:
2、创建一个索引序列,用标签标识每个数据点
与 NumPy 的数组相比,我们可以使用标签来进行索引从数据中选择数据:
["c", "a", "d"] 包含的不是数字,而是字符串,作为索引列表。
使用 NumPy 的函数或 NumPy 风格的操作,比如使用布尔值数组进行过滤,与标量相乘,或是应用数学函数,这些操作将保存索引值连接:
从另一个角度考虑 Series,可以认为它是一个长度固定且有序的字典,因为它将索引值和数据值按位置配对。在我们可能会使用字典的上下文中,也可以使用 Series:
3、使用字典生成 Series
当我们把字典传递给 Series 构造函数时,产生的 Series 的索引将是排序好的字典键。
我们可以将字典键按照我们想要的顺序传递给构造函数,从而生成的 Series 的索引顺序符合我们的预期:
sdata 中的三个值被放置在正确的位置,但是因为 "California" 没有出现在 sdata 的键中,它对应的值是 NaN(not a number),这是 pandas 中标记缺失值 或 NA 值的方式。因为 “Utah” 并不在 states 中,它被排除在结果对象外。
pandas 中使用 isnull 和 notnull 函数来检查缺失数据:
注意:isnull 和 notnull 也是 Series 的实例方法。
4、自动对齐索引
对于很多应用来说,在数学操作中自动对齐索引是 Series 的一个非常有用的特性:
5、Series 对象自身 及其 索引 的 name 属性
Series 对象自身和其索引都有 name 属性,这个特性与 pandas 其他重要功能集成在一起:
6、修改 Series 的索引
Series 的索引可以通过按位置赋值的防守进行改变。
三、DataFrame
1、利用包含等长度列表或 NumPy 数组的字典来创建 DataFrame
产生的 DataFrame 会自动为 Series 分配索引,并且列会按照排序的顺序排列:
对于大型 DataFrame,head 方法将会只选出头部的 5 行:
2、指定列的顺序,DataFrame 的列将会按照指定顺序排列
3、如果传的列不包含在字典中,将会在结果中出现缺失值
DataFrame 中的一列,可以按字典型标记或属性那样检索为 Series:
返回的 Series 与原 DataFrame 有相同的索引,且 Series 的 name 属性也会被合理地设置。
通过位置或特殊属性 loc 进行选取:
修改列的索引。例如:空的 “dept” 列可以赋值为标量值或值数组:
将列表或数组赋值给一个列时,值的长度必须和 DataFrame 的长度匹配。
将 Series 赋值给一列时,Series 的索引将会按照 DataFrame 的索引重新排列,并在空缺的地方填充缺失值:
将 Series 赋值给一列,如果被赋值的列不存在,则会生成一个新的列:
4、del 关键字对 DataFrame 删除列
在 del 的例子中,我们首先增加一列,这一列是布尔值,判断条件是 state 列是否为 “Ohio”:
del 方法可以用于移除之前新建的列:
5、包含字典的嵌套字典创建 DataFrame
嵌套字典被赋值给 DataFrame,pandas 会将字典的键作为列,将内部字典的键作为行索引:
使用类似 NumPy 的语法对 DataFrame 进行转置操作:
内部字典的键被联合、排序后形成了结果的索引。
显式的指明索引,内部字典的键将不会被排序:
6、使用包含 Series 的字典构造 DataFrame
7、DataFrame 属性
(1) name 属性:
(2) values 属性:
如果 DataFrame 的列是不同的 dtypes,则 values 的 dtype 会自动选择适合所有列的类型:
8、可以向 DataFrame 构造函数传递的对象列表
构造函数的有效输入:
类型 | 注释 |
---|---|
2D ndarray | 数据的矩阵,行和列的标签是可选参数。 |
数组、列表和元组构成的字典 | 每个序列成为 DataFrame 的一列,所有的序列必须长度相等。 |
NumPy 结构化 / 记录化数组 | 与数组构成的字典一致。 |
Series 构成的字典 | 每个值成为一列,每个 Series 的索引联合起来形成结果的行索引,也可以显式的传递索引。 |
字典构成的字典 | 每一个内部字典成为一列,键联合起来形成结果的行索引。 |
字典 或 Series 构成的列表 | 列表中的一个元素形成 DataFrame 的一行。 字典键 或 Series索引 联合起来形成 DataFrame 的列标签。 |
列表或元组构成的列表 | 与 2D ndarray 的情况一致。 |
其他 DataFrame | 如果不显式传递索引,则会使用原 DataFrame 的索引。 |
NumPy MaskedArray | 与 2D ndarray 的情况类似,但隐蔽值会在结果 DataFrame 中成为 NA / 缺失值。 |
注释:从 DataFrame 中选取的列是数据的视图,而不是拷贝。因此,对 Series 的修改会映射到 DataFrame 中。如果需要复制,则应当显式地使用 Series 的 copy 方法。
四、索引对象
pandas 中的索引对象是用于存储轴标签和其他元数据的(例如轴名称或标签)。
1、在构造 Series 和 DataFrame 时,我们所使用的任意数组或标签序列都可以在内部转换为索引对象:
索引对象是不可变的,我们无法修改索引对象:
不变性使得在多种数据结构中分享索引对象更为安全:
2、除了类似数组,索引对象也像一个固定大小的集合
3、pandas 索引对象可以包含重复标签
根据重复标签进行筛选,会选取所有重复标签对应的数据:
4、一些索引对象的方法和属性
方法 | 描述 |
---|---|
append | 将额外的索引对象粘贴到原索引后,产生一个新的索引 |
difference | 计算两个索引的差集 |
intersection | 计算两个索引的交集 |
union | 计算两个索引的并集 |
isin | 计算表示每一个值是否在传值容器中的布尔数组 |
delete | 将位置 i 的元素删除,并产生新的索引 |
drop | 根据传参删除指定索引值,并产生新的索引 |
insert | 在位置 i 插入元素,并产生新的索引 |
is_monotonic | 如果索引顺序递增则返回 True |
is_unique | 如果索引序列唯一则返回 True |
unique | 计算索引的唯一值序列 |