pandas 学习 第6篇:索引

索引是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

 

posted @ 2019-09-26 10:11 悦光阴 阅读(...) 评论(...) 编辑 收藏