pandas 数据分析:Index 对象的增删改查

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),适用于 DatetimeIndexPeriodIndex 以及 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等等。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值