Python dataframe 索引 切片


一、直接索引与切片。
二、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的切片既可以用在行筛选,又可以用在列筛选中。另外,别忘了,标签切片,左闭右闭;位置切片,左闭右开。

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索引(使用时知道行列的位置)

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']))]

猜你喜欢

转载自blog.csdn.net/qq_35240689/article/details/126994625