Index 对象
Immutable sequence used for indexing and alignment.
,即用于索引和对齐的不可变序列。
正因为在 pandas 中,数据具有对齐的属性,所以往往索引是可以重复的。
更多索引对象:
① RangeIndex
:单调整数范围的索引。
② CategoricalIndex
:类别索引。
③ MultiIndex
:多级索引、层级索引。
④ IntervalIndex
:区间索引。
⑤ DatetimeIndex
:日期时间索引,常见。
⑥ TimedeltaIndex
:Index of timedelta64 data. datetime.timedelta-like
.
⑦ PeriodIndex
:阶段索引。
零、创建对象
创建 Index 对象语法:pandas.Index(data=None, dtype=None, copy=False, name=None, tupleize_cols=True)
;
- data 参数:一维数组形状
- 数组的每一项都是不可变的;
- 数组的项可以是元组,以创建多级索引,前提是保证参数
tupleize_cols=True
。
- dtype 参数:NumPy dtype
None
:自适应一个类型;指定类型如 int64
:安全地强迫转换成指定类型。
- copy 参数:
- 布尔值
True
:Make a copy of input ndarray. - 布尔值
False
:Do not ~.
- 布尔值
- name 参数:
- tupleize_cols 参数:
- 布尔值
True
:允许可能地创建多级索引; - 布尔值
False
:不能创建多级索引。
- 布尔值
这里建立一个天干的索引,以供后续操作使用:
import pandas as pd
import numpy as np
tg10 = "甲乙丙丁戊己庚辛壬癸"
idx1 = pd.Index(list(tg10), name="天干")
idx1
# result bellow
Index(['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'], dtype='object', name='天干')
一、增
① insert 插入,语法:Index.insert(loc, item)
,即在指定位置上插入项。实际上,由于 Index 是不可变的,所以增删改操作都要创建一个新的 Index 对象。
- loc 参数:整数
idx2 = idx1.insert(0, "甲1") # 在 0 位置上插入项
idx2
# result bellow
Index(['甲1', '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'], dtype='object', name='天干')
② append 尾接,语法:Index.append(other)
:
- other 参数:
- Index 对象
- Index 对象组成的列表/元组
idxx = pd.Index(["甲2", "乙2", "丙2", "丁2"])
idx3 = idx1.append([pd.Index(["甲1", "乙1"]), idxx])
idx3
# result bellow
Index(['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸', '甲1', '乙1', '甲2', '乙2', '丙2', '丁2'], dtype='object')
③ union 并集,语法:Index.union(other, sort=None)
:
- other 参数:Index 或一个 array-like 数据。
- sort 参数:
- 空值
None
:对结果排序,除非- 两者相等;
- 两者存在一个长度为 0;
- 存在不可比较的值,报 RuntimeWarning。
- 布尔值
False
:不排序。 - 布尔值
True
:排序(可能报 TypeError,不同与 RuntimeWarning)。
- 空值
idxx = pd.Index(["甲", "乙", "丙2", "丁2"])
idx4 = idx1.union(idxx)
idx4
# result bellow
Index(['丁', '丁2', '丙', '丙2', '乙', '壬', '己', '庚', '戊', '甲', '癸', '辛'], dtype='object')
④ repeat 重复,重复指定元素,语法:Index.repeat(repeats, axis=None)
:
- repeats 参数:
- 一个整数 n:每一项都重复 n 次;
- 整数列表 x n x_n xn: i t e m n 重复 x n 次 item_n \text{重复} x_n \text{次} itemn重复xn次,长度必须与 Index 一致。
- axis 参数必须为 None。
idx1.repeat([1, 2, 3, 2, 1, 1, 2, 3, 2, 1]) # 结果较长,不展示
二、删
① drop 丢弃,语法:Index.drop(labels, errors='raise')
:
- labels 参数,项或项组成的一维数组。
- errors 参数,删除不存在的项时,控制是否报错:
- 字符串
ignore
:忽视 KeyError; - 字符串
raise
:正常抛出错误。
- 字符串
idx5 = idx1.drop(["甲", "乙", 1], errors="ignore") # 忽视错误项
idx5
# result bellow
Index(['丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'], dtype='object', name='天干')
② delete 删除,语法: Index.delete(loc)
:
- loc 参数:整数或整数组成的列表,负整数表示从末尾开始计算位置。
idx6 = idx1.delete([0, 1])
idx6
# result bellow
Index(['丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'], dtype='object', name='天干')
③ dropna 丢弃无效索引,语法:ndex.dropna(how='any')
:
- how 参数,作用于多级索引:
- 字符串
any
:多级索引中的项包含无效值,就丢弃; - 字符串
all
:多级索引中的项全是无效值,就丢弃。
三、改
① set_names 起名/改名,语法:Index.set_names(names, *, level=None, inplace=False)
:
- names 参数:新名字。
- level 参数:索引等级。
- inplace 参数:
- 布尔值
True
:原地操作,修改原Index,不新建Index,返回None; - 布尔值
False
:非原地操作。
- 布尔值
② rename 改名,语法:Index.rename(name, inplace=False)
:
- name 参数:新名字
- inplace 参数:
- 布尔值
True
:原地操作,修改原Index,不新建Index,返回None; - 布尔值
False
:非原地操作。
- 布尔值
③ fillna 填充无效索引,语法:Index.fillna(value=None, downcast=None)
:
- value 参数:用以填充的值。
④ reindex 新建,语法:Index.reindex(target, method=None, level=None, limit=None, tolerance=None)
,创建一个以 target 中项为索引的新 Index。
⑤ droplevel 降级,语法:Index.droplevel(level=0)
。
⑥ T 转置,这是一个属性。
⑦ shift 移动,Index.shift(periods=1, freq=None)
,适用于 DatetimeIndex、PeriodIndex 以及 TimedeltaIndex。
⑧ sort_values 排序,语法:Index.sort_values(return_indexer=False, ascending=True, na_position='last', key=None)
。
idx1.sort_values()
# result bellow
Index(['丁', '丙', '乙', '壬', '己', '庚', '戊', '甲', '癸', '辛'], dtype='object', name='天干')
四、查
① Index[i] 单项检索。
② Index[i:j] 切片检索。
③ get_loc(item) 返回项的位置,从零开始。
idx1.get_loc("乙")
# result bellow
1
④ values 项组成的数组。
⑤ get_level_values(level) 返回指定等级的索引。
还有很多属性可供查询,如:shape / size / ndim / name / is_xxx等等。