pandas子集选取的三种方法:[]、.loc[]、.iloc[]
2022/5/3 23:23:58
本文主要是介绍pandas子集选取的三种方法:[]、.loc[]、.iloc[],对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
pandas读取Excel、csv文件中的数据时,得到的大多是表格型的二维数据,在pandas中对应的即为DataFrame
数据结构。在处理这类数据时,往往要根据据需求先获取数据中的子集,如某些列、某些行、行列交叉的部分等。可以说子集选取
是一个非常基础、频繁使用的操作,而DataFrame
的子集选取看似简单却有一定复杂性。本文聚焦DataFrame
的子集选取操作逻辑,力求在实战中遇到子集选取操作的需求时"不迷路"。
一、图解DataFrame
DataFrame
是一种二维的表格型数据结构,每一行/列都有对应的标签
和位置序号
。行列标签、位置序号的对应关系如下图所示:
列标签(也叫列名:columns) 行标签(也叫行索引:index)默认为(0, 1, 2, …, n)。这里与位置序号恰好一致。
针对DataFrame
的数据结构,pandas提供了三种获取子集的索引器:[]
、.loc[]
、.iloc[]
。
df[]
:快捷的整行整列选取df.loc[]
:按标签
的行列交叉选取df.iloc[]
:按位置序号
的行列交叉选取
二、整行整列选取:df[]
df['列标签']
,选取单个整列
# 选取“日期”列 df['日期']
df[标签列表]
,选取多个整列
# 选取“最高温”,“最低温”,“风力风向”三列 df[['最高温','最低温','风力风向']]
df[切片]
,选取整行
# 选取行索引值1、2、3的整行。切片左闭右开 df[1:4]
切片语法也支持字符串的索引标签值,如将"日期"列修改为行索引(index)
df1 = df.set_index("日期")
# 下面两个切片选取的行是一样的 df1[1:4] #按位置序号的切片,左闭右开 df1['2021-12-02 周四':'2021-12-04 周六'] # 按行标签的切片,左闭右闭
df[]
语法小结:
df[]
语法中,方括号内输入标签名
或列表
选取的是列;而方括号内输入切片
、条件
选取的是行(条件筛选在下文单独介绍)。df[]
输入切片选取整行时,如果是按照位置序号的切片,左闭右开;按行标签的切片,左闭右闭。
三、行列交叉选取
行列交叉选择,可以通过df.loc[]
和df.iloc[]
两个索引器来实现,两者都需要输入两组参数,先行选择,后列选择。行、列选择都可以是单个标签(序号)、列表和切片。根据需求组合使用,威力强大!
df.loc[行选择,列选择]
。参数面向的是标签
。
df.iloc[行位置序号,列位置序号]
。参数面向的是位置序号
。
行
:单个数值,列
:单个数值
df1.loc['2021-12-05 周日','空气质量指数'] df1.iloc[4,4]
行
:列表,列
:列表
df1.loc[['2021-12-05 周日','2021-12-07 周二'],['最高温','最低温','风力风向']] df1.iloc[[4,6],[0,1,3]]
行
:切片,列
:切片
df1.loc['2021-12-01 周三':'2021-12-03 周五','天气':'空气质量指数'] df1.iloc[:3,2:5]
行
:切片(全选),列
:列表
df1.loc[:,['最高温','最低温']] df1.iloc[:,[0,1]]
四、按条件筛选子集
df.[]
、df.loc[]
、df.iloc[]
除了按照行列的标签和位置序号选取子集,还可以使用条件(布尔表达式)筛选子集。
筛选最高温、最低温
将最高温、最低温处理成数值型:
df1.loc[:,'最高温'] = df1['最高温'].str.replace('°','').astype('float32') df1.loc[:,'最低温'] = df1['最低温'].str.replace('°','').astype('float32')
获取最高温大于10度,最低温小于6度的数据
# df.[]的写法 df1[(df1['最高温']>10) & (df1['最低温']<6)] # df.loc[]的写法 df1.loc[(df1['最高温']>10) & (df1['最低温']<6),:] # &与、|或、~非 df1.loc[(df1['最高温']>10) & ~(df1['最低温']>=6),:]
五、函数筛选子集
# 匿名函数lambda表达式,获取最高温大于10度,最低温小于6度的数据 df1.loc[lambda df : (df['最高温']>10) & (df['最低温']<6)]
获取前9天并且空气质量指数为优
# 自定义函数,返回值是布尔数组 def queryData(df): return df.index.str.startswith('2021-12-0') & df['空气质量指数'].str.endswith('优') df1.loc[queryData , :]
小结
在pandast提供的df[]
、df.loc[]
、df.iloc[]
这个三种索引器,前两个更为常用。df[]
在整行或者整列获取时更为方便。整行整列选取可以看作是行列交叉选取的一个特例,故df.loc[]
是更为通用的方法,它支持单个标签值、列表多选、切片区间、条件(布尔)表达式、函数调用五种方式索引子集,功能强大。
这篇关于pandas子集选取的三种方法:[]、.loc[]、.iloc[]的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享