【python-pandas】筛选数据集中指定某些列&行都为(不)空的行列

背景:
最近在实战中遇到需要对大数据集的一些空值数据做处理,分类处理一些指定列名的列值都为空的数据行,并分别对拆分的两组数据的完整数据(其实就是利用其他列)进行数据计算处理。
下面抽象出两句解决方法:

源数据:
import numpy as np
import pandas as pd
nan = np.nan
data = {0: {0: 1.0, 1: nan, 2: 1.0},
1: {0: nan, 1: nan, 2: nan},
2: {0: 3, 1: 1, 2: 3},
4: {0: 5, 1: 5, 2: 5}}
df = pd.DataFrame(data)

算法思想:
1.先用指定列1&2,找到都为空的row的index
2.利用reindex重新筛选序列
3.利用isin在总数据集进行求反

index_c_r = df[[0,1]].dropna(how=‘all’,axis=0).index
df_allna = df.reindex(index=index_c_r )
df_not_allna = df[~df[0].isin(df_allna[0])]

注:
找到df中列0与列1都为空值的行的序列,并完整查询这两行;
0,1为指定的列名;
all为都为空值(any可以计算任一为空);
axis用0来指定处理行;
index为序
reindex指定筛选数据集相同的index


又遇到使用了,添一句:

ans_ na_val = ans[~ans[‘A’].isin(ans.dropna(how=‘any’)[‘A’])]

以上即可筛选出大数据集中,任一格为np.nan的所有行。(A为列名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值