索引是DataFrame和Series的行标签,并且可以有一个或多个索引。如果DataFrame和Series有一个索引,称作单级别索引;如果有多个索引,称作多级别索引。索引类似于DataFrame和Sereis的一列数据,可以有多种数据类型。索引的类型有:整数索引(Numeric Index)、分类索引(Category Index)、日期时间索引(DateTime Index、Timedelta Index)、时期索引(Period Index)、范围索引(Range Index)、间隔索引(Interval Index)、多级索引(Multi-level Index)。
多级索引(Multi-Level Index)是指序列(Series)或数据框(DataFrame)有多个索引,多级索引类似于二维关系表,也就是说,Series或DataFrame有一个类似于DataFrame结构的索引。
最常用的索引是整数索引、分类索引和日期索引。
一,基础函数
用于创建索引的最基础的构造函数:
pandas.Index(data,dtype=object,copy,name,tupleize_cols=True)
参数注释:
- data:类似于一维数组的对象,用于创建索引,索引是有序的。
- dtype:默认值是object,用于表示索引元素的类型
- copy:对输入的data进行复制
- name:索引的名称,默认值是Index
- tupleize_cols:如果设置为True,尝试创建多级索引(MultiIndex)。
举个例子,创建一个整数索引:
>>> pd.Index([1, 2, 3]) Int64Index([1, 2, 3], dtype='int64')
二,索引的属性
索引类似于二维关系表的一列,具有特定的属性:
- values:索引的值
- is_monotonic、is_monotonic_increasing、is_monotonic_decreasing:单调
- is_nuique、has_duplicates:唯一值、重复值,
- hasnans:是否有NA值
- dtype:索引元素的数据类型
- name:索引的名称属性,
- names:如果索引是多级(MultiLevel)的,那么每一级都有一个name
- size:索引元素的数量
- T:索引的转置
三,索引的缺失值
检查缺失值,isna() 对索引中的每个值进行检查,当值是NA时,返回True;当值不是NA时,返回False。 notna()对索引中的每个值进行检查,当值不是NA时,返回True;当值是NA时,返回False。
Index.isna(self)
Index.notna(self)
填充缺失值,用标量值来填充NA值,downcast表示向下类型兼容:
Index.fillna(self, value=None, downcast=None)
删除缺失值,参数how表示如何删除缺失值,有效值是any和all:
Index.dropna(self, how='any')
四,索引的排序
按照索引的值进行排序,但是返回索引值的下标,参数 *args和 **kwargs都是传递给numpy.ndarray.argsort函数的参数。
Index.argsort(self, *args, **kwargs)
按照索引的值进行排序,返回排序的副本,参数return_indexer 表示是否返回索引值的下标:
Index.sort_values(self, return_indexer=False, ascending=True)
举个例子,有如下索引:
>>> idx = pd.Index(['b', 'a', 'd', 'c']) Index(['b', 'a', 'd', 'c'], dtype='object')
按照索引值进行排序,返回排序索引的下标:
>>> order = idx.argsort() >>> order array([1, 0, 3, 2])
通过下标来查看索引的排序值:
>>> idx[order] Index(['a', 'b', 'c', 'd'], dtype='object')
当然,也可以直接返回已排序的索引:
>>> idx.sort_values() Index(['a', 'b', 'c', 'd'], dtype='object')
如果要返回已排序的索引和对应的下标,需要设置参数return_indexer=True:
>>> idx.sort_values(return_indexer=True) (Index(['a', 'b', 'c', 'd'], dtype='object'), array([1, 0, 3, 2], dtype=int64))
五,索引的转换
可以把索引转换为List、DataFrame、序列、数组(ndarray)等,ravel()函数用于把索引值展开成数组形式。
Index.to_list(self) Index.to_frame(self, index=True, name=None) Index.to_series(self, index=None, name=None) Index.ravel(self, order='C')
把索引值的类型转换为指定的类型:
Index.astype(self, dtype, copy=True)
六,索引值的操作
对索引值可以进行一系列的操作,下面列出最常用的索引操作的函数:
1,返回索引值的最大值或最小值所在的索引
Index.argmin(self, axis=None, skipna=True, *args, **kwargs)
Index.argmax(self, axis=None, skipna=True, *args, **kwargs)
2,删除索引值
删除指定的索引值
Index.delete(self, loc) Index.drop(self, labels, errors='raise')
3,重复值
drop_duplicates()函数用于把重复的值删除,keep参数的有效值是first、false和False,frist表示保留第一次、last表示保留最后一次、False表示把重复的值删除。
Index.drop_duplicates(self, keep='first')
检查索引值是否是重复的,当出现重复值时,把索引值相应位置的值设置为True。
Index.duplicated(self, keep='first')
4,插入新值
Index.insert(self, loc, item)
5,重命名索引的name属性
Index.rename(self, name, inplace=False)
6,索引的唯一值
Index.unique(self, level=None)
7,获取索引的下标
第一种方式是传递索引值列表:
Index.get_indexer(self, target, method=None, limit=None, tolerance=None)
参数注释:
target:索引列表
method:None, ‘pad’/’ffill’, ‘backfill’/’bfill’, ‘nearest’
- None表示完全匹配:
- pad/ffill:如果没有匹配,找到前一个非NA值
- backfill/bfill:如果没有匹配到,找到后一个非NA值
- nearest:如果没有匹配,找到最近的非NA值
limit:在target中不能完全匹配的连续标签的最大数量
tolerance:不能完全匹配的原始索引和新索引之间的最大距离, 匹配位置处的索引值最满足方程 abs(index [indexer]-target)<=tolerance。
第二种方式是传递一个索引的标量值,返回该标量值在索引中的位置:
Index.get_loc(self, key, method=None, tolerance=None)
七,其他类型的索引
- 1,整数索引
- 2、分类索引
- 3,日期索引
参考文档:
pandas index