利用DataFrame.iloc[]和DataFrame.loc[]筛选特定数据(多条件筛选)
1、两者之间的区别
通过代码来直观演示它们之间的区别
import pandas as pd
data = pd.DataFrame([{2, 5, 6, 7, 8}, (2, 5, 6, 7, 8), [12, 31, 4, 5, 6], range(11, 111, 20), range(9, 23, 3)],
columns=['col_a', 'col_b', 'col_c', 'col_d', 'col_e'],
index=['row_1', 'row_2', 'row_3', 'row_4', 'row_5'])
data
'''IN1输出
col_a col_b col_c col_d col_e
row_1 2 5 6 7 8
row_2 2 5 6 7 8
row_3 12 31 4 5 6
row_4 11 31 51 71 91
row_5 9 12 15 18 21
'''
#利用data.loc[]只能通过行和列名字作为索引来搜索得到特定的值
data.loc[['row_1','row_2'],:]
#IN2输出
'''
col_a col_b col_c col_d col_e
row_1 2 5 6 7 8
row_2 2 5 6 7 8
'''
data.loc[['row_1','row_2'],'col_a':'col_c']
'''IN3输出
col_a col_b col_c
row_1 2 5 6
row_2 2 5 6
'''
#如果使用数字作索引比如data.loc[0:1,:]则会报错。相反data.iloc[]可以通过数字作为索引,但不能通过名字来作为索引
data.iloc[0:1,0:2]
'''
IN4输出
col_a col_b
row_1 2 5
'''
#可以发现loc[]和iloc[]的共同点是:':'切片索引包括开头不包括尾部,行列都如此
2、多条件筛选
这部分也是通过代码演示
data
'''IN1输出
col_a col_b col_c col_d col_e
row_1 2 5 6 7 8
row_2 2 5 6 7 8
row_3 12 31 4 5 6
row_4 11 31 51 71 91
row_5 9 12 15 18 21
'''
#第一种方法,通过data[(条件1)(逻辑符号)(条件2)]
data[(data.col_a>2)&(data.col_b==31)]#或者data[(data['col_a']>2)&(data['col_b']==31)]
'''IN2输出
col_a col_b col_c col_d col_e
row_3 12 31 4 5 6
row_4 11 31 51 71 91
'''
#第二种方法,利用data.loc[]
data.loc[(data.col_a>2)&(data.col_b==31),:]
#注意1.写条件是把条件写在行索引的位置,不能写在列索引的位置比如data.loc[:,(data.col_a>2)&(data.col_b==31)]
#注意2.包裹条件的()小括号必不可少
'''IN3输出
col_a col_b col_c col_d col_e
row_3 12 31 4 5 6
row_4 11 31 51 71 91
'''
#需要查看筛选后的某些列的值可以指定列索引
data.loc[(data.col_a>2)&(data.col_b==31),['col_a','col_b']]
'''IN4输出
col_a col_b
row_3 12 31
row_4 11 31
'''
#第三种方法是第1中方法的变形
data[(data.iloc[:,0]>2)&(data.iloc[:,1]==31)]
'''IN5输出
col_a col_b col_c col_d col_e
row_3 12 31 4 5 6
row_4 11 31 51 71 91
'''
#data.iloc[]的行索引位置,不能像data.loc[]那样直接书写条件如data.loc[(data.col_a>2)&(data.col_b==31),:],会报错