利用DataFrame.iloc[]和DataFrame.loc[]筛选特定数据(多条件筛选)

利用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),:],会报错


  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值