巧用DataFrame布尔索引的方法删除特定行或列

2 篇文章 0 订阅
1 篇文章 0 订阅

对于pandas DataFrame对象通常用“df.drop()”方法或关键字del删去行或列,但drop和del操作都必须先要知道想删除的确切列名或索引。如果只知道想要删去符合某个条件的行或列,必须先把这些行列的索引号找出来放到一个列表里,再代入到drop或del代码语句里执行删除操作,比较麻烦。其实有个简单好用的技巧,就是利用布尔索引来提取想要保留的内容,赋值给自己,自然就删去了想要删的内容,像过滤一样。删除操作的基本格式是:

df=df[逻辑表达式取反]

以下面的表格为例,定义其为DataFrame对象df:

indexABCDE
026923
13NaN301
2566NaN9
390607
49NaN853
579432
66171NaN

(1)删去满足条件的行
删去B列大于7或D列为0的行,也就是要保留B列小于等于7且D列不为0的行

df=df[~((df['B']>7)|(df['D']==0))]
print(df)

以上代码跟下面的代码效果一样,上面逻辑表达式取了反,下面没取反

df=df[(df['B']<=7)&(df['D']!=0)]
print(df)

结果是:

indexABCDE
026923
2566NaN9
66171NaN
又如,删去E列取值为2或7的行
df=df[~df['E'].isin([2,7])]
print(df)

结果为:

indexABCDE
026923
13NaN301
2566NaN9
49NaN853
66171NaN
(2)删去满足条件的列
删去第3行取值是偶数的列
df=df.loc[:,~(df.iloc[3,:]%2==0)]
print(df)

结果是:

indexAE
023
131
259
397
493
572
66NaN

(3)删去含有缺失值的行
相当于dropna()

df=df[~df.isnull().any(axis=1)]
print(df)

结果是:

indexABCDE
026923
390607
579432
(4)删去含有缺失值的列
df=df.loc[:,~df.isnull().any()]
print(df)

结果是:
index | A | C
-----😐:—😐
0 | 2 | 9 |
1 | 3 | 3 |
2|5|6|
3|9|6|
4|9|8|
5|7|4|
6|6|7|
(5)删去整个表格中满足条件的行
删去整个表格中所有数值“6”所在的行

df=df.loc[~df.where(df==6).any(axis=1)]
print(df)

结果是:

indexABCDE
13NaN301
49NaN853
579432
上面的操作如果改为对列删除,则代码改为:
df=df.loc[:,~df.where(df==6).any()]

(6)删去含有确实值的行
删去任何列含有缺失值的行
df=df[~df.isnull().any(axis=1)]
删去某些特定列含有缺失值的行
df=df[~df.loc[:, [‘A’,‘C’]].isnull().any(axis=1)]

  • 21
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值