pandas 某列查找、选取与删除某数

1.查找与选取

 

法1 循环比较

for x in df['id']:
    if x == 1:
        print('exsit')
        break

耗时:2.8s

如果不仅仅想确认存在,还想返回下标。

多用一个enumerate,或者用range进行循环即可。

 

 

法2 掩码运算

不仅能确认存在,存在时还能获得index。

q=mydf[mydf['id'] == 1].index.tolist()

if len(q)==0:
    print('not exsit')

耗时:0.16s

 

法3 set空间换时间

仅能确认“存在”,无法返回下标。

优点是速度很快。

#转为set
ss = set(df['id'])
if 1 in ss:
    print('exist')

耗时:0.01s

 

可见循环最慢,set最快,使用掩码运算次之。

 

 

2.删除

 

先介绍isin()函数,它可以达到与掩码运算相似的效果。

传入的参数必须是一个序列,比如list,如果值存在于这个序列中,返回True,否则False。

q=mydf[mydf['id'].isin([1])].index.tolist()
if len(q)==0:
    print('not exsit')

 

法1 用set构建正样本集合

#用一个临时容器存储需要的值
temp = set(df['id'])

#假设我们想从id这列去掉1和2
temp.remove('1')
temp.remove('2')

#再用isin()调整即可
df = df[df['id'].isin(temp)]

耗时1.06s

 

法2 直接原地取反

通过取反,来表示不需要这两个数
df=df[~df1['A'].isin([1,2])]

耗时0.16s

显然法2简单优美高效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值