【pd】数据选择

df(DataFrame) :
	M		N		K		P
A	-0.444336	0.617917	0.699179	0.816153
B	0.034894	-0.957739	-1.018275	-1.012003
C	0.547609	0.576281	0.437207	0.236821
D	-0.646688	-0.922364	-2.109010	0.319319
E	1.046279	0.140150	-0.375267	-0.793271

运算符 []

传入单个标签时,将选择该,并返回一个 Series

df['M']

传入一个切片对象(slice)时,将选择对应的多

  • 使用整数进行切片时,前闭后开
  • 使用标签进行切片时,起止端点都会被包含,前闭后闭
df[2:4] # 第3行到第5行,不包括第5行

"""
	M		N		K		P
C	0.547609	0.576281	0.437207	0.236821
D	-0.646688	-0.922364	-2.109010	0.319319
"""

df.sort_values(by="N")["B":"C"]

"""
df.sort_values(by="N"):
	M		N		K		P
B	0.034894	-0.957739	-1.018275	-1.012003
D	-0.646688	-0.922364	-2.109010	0.319319
E	1.046279	0.140150	-0.375267	-0.793271
C	0.547609	0.576281	0.437207	0.236821
A	-0.444336	0.617917	0.699179	0.816153

df.sort_values(by="N")["B":"C"]:
	M		N		K		P
B	0.034894	-0.957739	-1.018275	-1.012003
D	-0.646688	-0.922364	-2.109010	0.319319
E	1.046279	0.140150	-0.375267	-0.793271
C	0.547609	0.576281	0.437207	0.236821
"""

标签选择 df.loc[row,columns]

选择一个匹配标签的行

df.loc['row_label']

选择所有行和指定列标签(列子集)

df.loc[:,['col1','col2']]

df.loc[:,['col1':'col2']] # 报错,没有这种写法

使用标签进行切片时,起止端点都会被包含

df.loc['row1':'row5']  # 包含 row5

获取单个标量值

df.loc['row_label', 'col_label'] # 返回一个具体的值(标量)

df.at['row_label', 'col_label'] # 效果与上面相同,但**更快**(推荐用于**只访问一个元素**时)

位置选择

使用整数位置索引进行选择

df.iloc[3] # 选择第四行 (从0开始算第一行)

使用整数切片进行选择

df.iloc[1:4] # 选择第二行到第四行 (不包括第五行)

使用整数位置列表进行选择

df.iloc[[0,2,5]] # 选择第1、3、6行

df.iloc[:,[1,3]] # 选择所有行的第2、4列

df.iloc[[1,3],[2,4]] # 选择第1、3行的第2、4列

显式按行切片

df.iloc[2:5,:] # 选择第3到5行的所有列

显式按列切片

df.iloc[:,1:4] # 选择所有行的第2到4列

显式获取单个

df.iloc[2,3] # 选择第3行的第4列的值

df.iat[2,3] # 同样选择第3行的第4列的值,但比iloc更快

布尔索引

选择满足条件的行

df[df['K'] > 0] # 选择 df['K']>0 的所有行

df[df.loc[:,'K']>0] # 同上

df[df.iloc[:,2]>0] # 同上,(若K在第3列)

"""
	M		N		K		P
A	-0.444336	0.617917	0.699179	0.816153
C	0.547609	0.576281	0.437207	0.236821

"""

使用布尔条件从 DataFrame 中筛选值

  • 多个条件时用 &(与)、|(或)连接,每个条件用括号括起来
df[df['B']=="foo"] # 选出 B 列值为"foo"的所有行

df[(df['A']>0) & (df['B']=="foo")] # 选择 A 列值大于0、且 B 列值为"foo"的所有行
df[df>0]

"""
df>0:
	M	N	K	P
A	False	True	True	True
B	True	False	False	False
C	True	True	True	True
D	False	False	False	True
E	True	True	False	False

df[df>0]:
	M		N		K		P
A	NaN		0.617917	0.699179	0.816153
B	0.034894	NaN		NaN		NaN
C	0.547609	0.576281	0.437207	0.236821
D	NaN		NaN		NaN		0.319319
E	1.046279	0.140150	NaN		NaN

"""

使用 isin() 方法进行筛选

df[df['B'].isin(["foo","bar"])] # 选择 B 列值是"foo"或"bar"的所有行
posted @ 2025-05-15 12:23  wasline  阅读(41)  评论(0)    收藏  举报