Pandas学习笔记—索引

本文深入探讨Pandas库中的各种高级索引技术,包括单级和多级索引的创建、切片、交换及设定,展示了loc、iloc、where、mask、query等函数的应用,并介绍了重复元素处理和样本抽取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 单级索引

1.1 loc方法、iloc方法、[ ]操作符

1.1.1 loc方法

单行索引
在这里插入图片描述
多行索引
在这里插入图片描述
在这里插入图片描述
单列索引
在这里插入图片描述
多列索引
在这里插入图片描述
在这里插入图片描述
联合索引
在这里插入图片描述
函数式索引
在这里插入图片描述
布尔索引
在这里插入图片描述

1.1.2 iloc方法

单行索引
在这里插入图片描述
多行索引
在这里插入图片描述
单列索引
在这里插入图片描述
多列索引
在这里插入图片描述
混合索引
在这里插入图片描述
函数式索引
在这里插入图片描述

1.1.3.a Series的[ ]操作

单元素索引
在这里插入图片描述

多行索引
在这里插入图片描述
函数式索引
在这里插入图片描述
布尔索引
在这里插入图片描述

1.1.3.b DataFrame的[ ]操作

单行索引
在这里插入图片描述
获得某一个元素
在这里插入图片描述
多行索引
在这里插入图片描述
单列索引
在这里插入图片描述
多列索引
在这里插入图片描述
函数式索引
在这里插入图片描述
布尔索引
在这里插入图片描述

1.2 布尔索引

1.2.1 利用布尔符号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

loc和[]中相应位置都能使用布尔列表选择
在这里插入图片描述

1.2.2 isin方法

在这里插入图片描述
等价于在这里插入图片描述

1.3 快速标量索引

当只需要取一个元素时,at和iat方法能够提供更快的实现
在这里插入图片描述

1.4 区间索引

interval_range方法
在这里插入图片描述
利用cut将数值列转为区间元素的分类变量
在这里插入图片描述
区间索引的选取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果想要选取某个区间,先要把分类变量转为区间变量,再使用overlap方法
在这里插入图片描述

2. 多级索引

2.1 创建多级索引

2.1.1 通过from_tuple或from_arrays

直接创建元组
在这里插入图片描述
在这里插入图片描述
利用zip创建元组
在这里插入图片描述
通过Array创建
在这里插入图片描述

2.1.2 通过from_product

在这里插入图片描述

2.1.3 set_index方法

在这里插入图片描述

2.2 多层索引切片

2.2.1 一般切片

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2.2 第一类特殊情况:由元组构成列表

在这里插入图片描述

2.2.3 第二类特殊情况:由列表构成元组

在这里插入图片描述

2.3 多层索引中的slice对象

在这里插入图片描述
在这里插入图片描述

2.4 索引层的交换

2.4.1 swaplevel方法(两层交换)

在这里插入图片描述
在这里插入图片描述

2.4.2 reorder_levels方法(多层交换)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 索引设定

3.1 index_col参数

在这里插入图片描述

3.2 reindex和reindex_like

在这里插入图片描述
在这里插入图片描述
可以选择缺失值的填充方法:fill_value和method(bfill/ffill/nearest),其中method参数必须索引单调
在这里插入图片描述
reindex_like的作用为生成一个横纵索引完全与参数列表一致的DataFrame,数据使用被调用的表
在这里插入图片描述
如果df_temp单调还可以使用method参数
在这里插入图片描述

3.3 set_index和reset_index

3.3.1 set_index方法

在这里插入图片描述
利用append参数可以将当前索引维持不变
在这里插入图片描述
使用与表长相同的列作为索引(需要先转化为Series,否则报错)
在这里插入图片描述
可以直接添加多级索引
在这里插入图片描述

3.3.2 reset_index方法

在这里插入图片描述
用level参数指定哪一层被reset,用col_level参数指定set到哪一层
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 rename_axis和rename

3.4.1 rename_axis方法

rename_axis是针对多级索引的方法,作用是修改某一层的索引名,而不是索引标签
在这里插入图片描述

3.4.2 rename方法

rename方法用于修改列或者行索引标签,而不是索引名
在这里插入图片描述

4. 常用索引型函数

4.1 where函数

当对条件为False的单元进行填充
在这里插入图片描述
通过这种方法筛选结果和[ ]操作符的结果完全一致
在这里插入图片描述
第一个参数为布尔条件,第二个参数为填充值
在这里插入图片描述

4.2 mask函数

mask函数与where功能上相反,其余完全一致,即对条件为True的单元进行填充
在这里插入图片描述
在这里插入图片描述

4.3 query函数

query函数中的布尔表达式中,下面的符号都是合法的:行列索引名、字符串、and/not/or/&/|/~/not in/in/==/!=、四则运算符
在这里插入图片描述

5. 重复元素处理

5.1 duplicated方法

该方法返回了是否重复的布尔列表
在这里插入图片描述
可选参数keep默认为first,即首次出现设为不重复,若为last,则最后一次设为不重复,若为False,则所有重复项为True
在这里插入图片描述

5.2 drop_duplicates方法

剔除重复项
在这里插入图片描述
参数与duplicate函数类似
在这里插入图片描述
在传入多列时等价于将多列共同视作一个多级索引,比较重复项
在这里插入图片描述

6. sample抽样函数

n为样本量
在这里插入图片描述
frac为抽样比
在这里插入图片描述
replace为是否放回
在这里插入图片描述
axis为抽样维度,默认为0,即抽行
在这里插入图片描述
weights为样本权重,自动归一化
在这里插入图片描述
以某一列为权重
在这里插入图片描述

7. 问题与练习

7.1 问题

【问题一】 如何更改列或行的顺序?如何交换奇偶行(列)的顺序?

使用iloc函数;利用切片[0::2][1::2]

【问题二】 如果要选出DataFrame的某个子集,请给出尽可能多的方法实现。

loc、iloc和 [ ]

【问题三】 query函数比其他索引方法的速度更慢吗?在什么场合使用什么索引最高效?

不;与数据库结合时用最高效

【问题四】 单级索引能使用Slice对象吗?能的话怎么使用,请给出一个例子。

能; df.loc[idx['1103':],:]

【问题五】 如何快速找出某一列的缺失值所在索引?

#先构建一个有缺失值的数据表
data=pd.DataFrame({'name':['Kite','Lily','Hanmei','Danny','Bob'],'English':[92,78,np.nan,23,82],'Math':[69,87,91,np.nan,90],'Chinese':[np.nan,78,96,np.nan,75]})
print(data)
#缺失值为"NaN"
data.query('(Chinese in ["NaN"])').index
#可见结果是0,3

【问题六】 索引设定中的所有方法分别适用于哪些场合?怎么直接把某个DataFrame的索引换成任意给定同长度的索引?

适用场合见上文

df.set_index(pd.Series(np.random.rand(df.shape[0]))).head()

【问题七】 多级索引有什么适用场合?

存在多个条件时

【问题八】 什么时候需要重复元素处理?

考虑不同类比元素影响时

7.2 练习

【练习一】 现有一份关于UFO的数据集,请解决下列问题:
在这里插入图片描述

(a)在所有被观测时间超过60s的时间中,哪个形状最多?

(b)对经纬度进行划分:-180°至180°以30°为一个划分,-90°至90°以18°为一个划分,请问哪个区域中报告的UFO事件数量最多?

在这里插入图片描述
在这里插入图片描述

【练习二】 现有一份关于口袋妖怪的数据集,请解决下列问题:
在这里插入图片描述

(a)双属性的Pokemon占总体比例的多少?

(b)在所有种族值(Total)不小于580的Pokemon中,非神兽(Legendary=False)的比例为多少?

(c)在第一属性为格斗系(Fighting)的Pokemon中,物攻排名前三高的是哪些?

(d)请问六项种族指标(HP、物攻、特攻、物防、特防、速度)极差的均值最大的是哪个属性(只考虑第一属性,且均值是对属性而言)?

(e)哪个属性(只考虑第一属性)的神兽比例最高?该属性神兽的种族值也是最高的吗?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考文章: Pandas教程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值