首页 > pandas 阅读数:45

pandas index索引对象

pandas 的两种数据结构 Series 和 DataFrame 都是具备索引的。在创建 pandas 的两种数据结构时,可以通过选项参数 index 指定标签或行索引。本节教程就来介绍 pandas 索引。

Index 索引对象

pandas 的索引对象负责管理轴标签和其他元数据(如轴名称等)。在创建 Series 或 DataFrame 的时候,所用到的任何数组或其他序列的标签都会被转换成一个 Index 对象。

与 pandas 数据结构( Series 和 DataFrame )中其他元素不同的是,Index 对象是不可修改的(Immutable),一旦声明,它就不能改变。当不同数据结构共用 Index 对象时,该特性能够保证它的安全。

pandas 中主要的 Index 对象见表 1。
表 1:主要的 Index 对象
类型 说明
Index 最泛化的 Index 对象,轴标签是一个由 Python 对象组成的 NumPy 数组
Int64Index 针对整数的特殊 Index
Multilndex “层次化”索引对象,表示单个轴上的多层索引,可以看作由元组组成的数组
DatetimeIndex 存储纳秒级时间戳(用 NumPy 的 datatime64 类型表示)
PeriodIndex 针对 Period 数据(时间间隔)的特殊 Index

Index 对象的属性和方法

每个索引对象都有一些属性和方法,这些属性和方法可用于设置逻辑并回答有关该索引所包含的数据的常见问题。

1. 获取 Index 对象

利用 Index 属性可以获取 Index 对象。例如,获取产品价格的 DataFrame 数据结构转置后的 Index 对象,其示例代码如下:
In [48]:  index = df.T.Index
In [49]:  index
Out[49]:  Index(['product', 'price'], dtype='object', name='item')

2. 索引切片

对索引的切片与 Python 对列表的切片操作是相同的,即 index[起始值:终止值:步长]。

3. 判断索引是否属于 Index 对象

in() 函数可用于判断索引是否属于 Index 对象。例如,首先创建一个 Index 对象,再创建 Series 对象,该对象中 index 参数引用 Index 对象,然后利用 in() 函数判断 'a' 索引是否属于 Index 对象,其示例代码如下:
In [1]:  #创建一个Index对象
In [2]:  import pandas as pd
In [3]:  index = pd.Index(['a','b','c'])
In [4]:  se1 = pd.Series([0,1,2],index=index)
In [5]: 'a' in index
Out[5]:  True

4. 连接两个 Index 对象

利用 append() 函数连接另一个 Index 对象,可产生一个新的 Index 对象。例如创建 2 个 Index 对象 index1 和 index2,然后将它们连接成一个新的 Index 对象,其示例代码如下:
In [6]:  #创建2个Index对象
In [7]:  index1 = pd.Index(['a','b','c'])
In [8]:  index2 = pd.Index(['c','d','b','e'])
In [9]:  #连接两个Index对象
In [9]:  index3 = index1.append(index2)
In [10]: index3
Out[10]: Index(['a', 'b', 'c', 'c', 'd', 'b', 'e'], dtype='object')

5. 计算差集

利用 difference() 函数可实现计算差集的操作,其示例代码如下:
In [11]:  #计算两个Index对象的差集
In [12]:  index3 = index1.difference(index2)
In [13]:  index3
Out[13]:  Index(['a'], dtype='object')

6. 计算交集

利用 intersection() 函数可实现计算交集的操作,其示例代码如下:
In [14]:  #计算两个Index对象的交集
In [15]:  index3 = index1.intersection (index2)
In [16]:  index3
Out[16]:  Index(['b', 'c'], dtype='object')

7. 计算并集

利用 union() 函数可实现计算并集的操作,其示例代码如下:
In [17]:  #计算两个Index对象的并集
In [18]:  index3 = index1.union(index2)
In [19]:  index3
Out[19]:  Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

8. 判断索引是否存在

利用 isin() 函数可实现判断一个索引对象是否在另一个索引对象中,返回一个 bool 类型的数组的操作,其示例代码如下:
In [20]:  index3 = index1.isin(index2)
In [21]:  index3
Out[21]:  array([False, True, True])

9. 删除索引

利用 delete() 函数可以删除指定位置索引,返回一个新的索引对象,其示例代码如下:
In [22]:  index1 = pd.Index(['a','b','c','d','e','f','g'])
In [23]:  index = index1.delete([0,3,6])
In [24]:  index
Out[24]:  Index(['b', 'c', 'e', 'f'], dtype='object')

10. 插入元素

利用 insert() 函数将元素插入到指定下标位置,返回一个新索引对象,其示例代码如下:
In [25]:  index = index1.insert(1,'h')
In [26]:  index
Out[26]:  Index(['a', 'h', 'b', 'c', 'd', 'e', 'f', 'g'], dtype='object')

11. 判断索引对象中是否存在重复值

利用 is_unique() 函数可判断索引对象中是否存在重复值,包含重复值返回 False,不包含返回 True,其示例代码如下:
In [27]:  index1 = pd.Index(['a','b','c','a'])
In [28]:  index1.is_unique
Out[28]:  False
In [29]:  index2 = pd.Index(['a','b','c'])
In [30]:  index2.is_unique
Out[30]:  True

12. 筛选出 Index 对象去重后的元素

利用 unique() 函数可以筛选出 index 对象去重后的元素,组成一个新的 Index 对象,其示例代码如下:
In [31]:  index1 = pd.Index(['a','b','a'])
In [32]:  index1.unique()
Out[32]:  Index(['a', 'b'], dtype='object')

13. 判断递增或递减

利用 is_monotonic 或 is_monotonic_increasing() 函数可以判断 Index 对象中的元素是否是递增的,而利用 is_monotonic_decreasing() 函数则可判断 Index 对象中的元素是否是递减的,其示例代码如下:
In [33]:  index1 = pd.Index(['a','b','c'])
In [34]:  index1.is_monotonic_increasing
Out[34]:  True
In [35]:  index2 = pd.Index(['c','b','a'])
In [36]:  index2.is_monotonic_decreasing
Out[36]:  True