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"的所有行