赞
踩
一、直接索引与切片。
二、loc索引(使用时知道行列的名称)
三、iloc索引(使用时知道行列的位置)
四、布尔索引(最强大的,用好了直接封神的那种)
索引在 Pandas 中非常重要,通过索引我们可以获取 Series 或 DataFrame中的任意数据。
Series 和 DataFrame 在索引上的使用是一致的,而且实际中我们更常使用的类型是DataFrame,因此在自处我们讲解都以DataFrame为例,学会DataFrame的切片与索引后, Series类型的使用方法大家也就明白了。
索引和切片方式有很多,主要包括:
点字符 : 访问列 (使用点字符以访问成员变量的方式访问列,一次可以访问一列。这里不推荐使用这种方式,主要是为了避免列名与函数名或者保留字冲突。)
中括号 : [ ]
loc[ ] :基于标签索引,可以批量选取
iloc[ ] :基于位置索引,可以批量选取
at[ ] : 基于标签索引,只能选取一个元素
iat[ ] : 基于位置索引,只能选取一个元素
使用中括号访问数据是Numpy遗留下来的方式
列索引
使用列标签访问单个列:d['A'] (注意只能用列标签,不可以是列位置序号)
使用列列表访问多个列:d[['A','B']]
行索引
使用索引切片访问多行:d['a' : 'c'] (此处可以使用位置,且末端不包含)
联合索引
使用2个中括号,一个处理行,一个处理列,就可以进行块访问了,且不区分行[ ]与列[ ]的顺序。
这里不要纠结,为什么行可以用切片,而列不可以;为什么列可以用列表,而行却不可以。
import pandas as pd import numpy as np df = pd.read_csv( 'C:\\Users\\Administrator\\libin_work\\beijing.csv' ) # 单列索引 # 使用列名标签来返回单列,之所以选择列的语法如此简单, 是因为df本质上是将多个Series作为列拼接起来的。 df['date'] # 多列索引 # 索引多列时,传入的必须是一个list,而不是多个列名标签--方括号应该有两层。 df[['东四', '天坛', '官园']] #----------------------------------------------------------------------- # 行的索引本质是切片 # 单行索引 df[0:1] # 第1行 df[5:6] # 第6行 # 多行索引 df[0:10] # 获取前10行 df[:10] # 获取前10行 df[5:] # 获取第5行和后面所有的行 df[0:100:5] # 获取前100行中的 每5行行取一行,总计20行 #------------------------------------------------------------------------ # 联合索引 # 第2行开始到最后,每5行取一行,列取 5 列 df[2::5][['hour', 'type', '东四', '天坛', '官园']]
loc是严格的基于标签的索引方法,即便使用数字也会被理解为标签是数字类型的,而不会被处理为位置下标。若在loc方法中使用位置下标会发生错误。
注意:与中括号不同的是,loc的切片既可以用在行筛选,又可以用在列筛选中。另外,别忘了,标签切片,左闭右闭;位置切片,左闭右开。
loc方法的基本格式:
d.loc[行标签,列标签] 行列同时筛选
d.loc[:, 列标签] 只筛选列
d.loc[行标签] 只筛选行
使用loc方法接受以下输入:
单个标签(可以是数字)
标签列表
标签切片
布尔类型:判断大小,isin等
函数
import pandas as pd import numpy as np df = pd.read_csv( 'C:\\Users\\Administrator\\libin_work\\beijing.csv' ) # 单行索引 df.loc[0] # 取第一行,输出 Series 类型 df.loc[[0]] # 取第一行,输出 DataFrame 类型 # 多行索引 df.loc[[0, 5]] # 第0行和第5行 df.loc[:10] df.loc[0:10] df.loc[0:] df.loc[0:10:5] df.loc[0::5] # ------------------------------------------------------------------ # 单列索引 df.loc[:,"万柳"] # 取所有行,“万柳”这一列 # 多列索引 df.loc[:,["万柳","前门"]] # 联合索引 # 第4行开始到最后,每隔5行获取一行,指定 6 列 df.loc[4::5, ['date', 'hour', 'type', '东四', '天坛', '官园']]
iloc的用法与loc完全相同,区别仅在于iloc是严格基于数字位置下标的索引方法。在iloc中,仅可以使用数字下标,否则报错。
注意:iloc的切片是左闭右开的!!!这点与loc不同。
使用iloc方法接受以下输入:
位置下标
位置列表
切片
布尔
函数
import pandas as pd import numpy as np df = pd.read_csv( 'C:\\Users\\Administrator\\libin_work\\beijing.csv' ) # 单行索引 df.iloc[0] # 取第一行,输出 Series 类型 df.iloc[[0]] # 取第一行,输出 DataFrame 类型 # 多行索引 和loc 类似,只不过填入的是 index df.iloc[:5] # ------------------------------------------------------------------ # 单列索引 df.iloc[:, 3] # 取所有行,“万柳”这一列 # 多列索引 df.iloc[:, 0:10:2] # 联合索引 df.iloc[::10, 1:20:3]
pandas 中布尔索引是选择行的数据的强大的和有用的方法之一。DataFrame根据条件进行筛选,当条件判断True时,返回。当条件判断为False时,过滤掉。
布尔符号:‘&’,‘|’,‘~’:分别代表和and,或or,取反not。
loc索引和[]直接索引中相应位置可以使用布尔列表选择。
import pandas as pd import numpy as np df = pd.read_csv( 'C:\\Users\\Administrator\\libin_work\\beijing.csv' ) # 最简单的就是直接给出判断的规则进行索引,比如要找出AQI的所有行 df['type']=='AQI' # 返回的是 true 和 false df[df['type']=='AQI'] # 获取 type 那一列 值为 AQI 的所有行 # 多条件 # 与 # 获取 type 那一列 值为 AQI 的所有行,切 东四 那一列 值 <= 50的 df[(df['type']=='AQI') & (df['东四']<=50)] # 或 # 获取 type 那一列值为 AQI或者PM2.5 的所有行 df[(df['type']=='AQI') | (df['type']=='PM2.5')] # 等价于上面的写法 df.loc[df['type'].isin(['AQI', 'PM2.5'])] # 非 # 返回除了 type 列等于 'PM2.5_24h', 'PM10_24h' 外的数据 df[~(df['type'].isin(['PM2.5_24h', 'PM10_24h']))]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。