python – 如果列超过特定数量的NA值,则删除该列

我想写一个程序,如果它超过特定数量的NA值,就会删除一列.这就是我所做的.

def check(x):
for column in df:
    if df.column.isnull().sum() > 2:
        df.drop(column,axis=1)

执行上面的代码没有错误,但在执行df.apply(check)时,会出现大量错误.

P.S:我知道df.dropna中的thresh争论(thresh,axis)

有什么提示吗?为什么我的代码不起作用?

谢谢

解决方法

我认为最好的是使用
dropna参数thresh:

thresh : int,optional

Require that many non-NA values.

因此,对于vectorize解决方案,从DataFrame的长度中减去它:

N = 2
df = df.dropna(thresh=len(df)-N,axis=1)
print (df)
   A  D    E  F
0  a  1  5.0  a
1  b  3  3.0  a
2  c  5  6.0  a
3  d  7  9.0  b
4  e  1  2.0  b
5  f  0  NaN  b

我建议使用DataFrame.pipe作为输入DataFrame的apply函数,将df.column更改为df [column],因为带有来自变量的动态列名的点表示法失败(它尝试选择列名列):

df = pd.DataFrame({'A':list('abcdef'),'B':[np.nan,np.nan,5,np.nan],'C':[np.nan,8,2,3],'D':[1,3,7,1,0],'E':[5,6,9,'F':list('aaabbb')})

print (df)
   A    B    C  D    E  F
0  a  NaN  NaN  1  5.0  a
1  b  NaN  8.0  3  3.0  a
2  c  NaN  NaN  5  6.0  a
3  d  5.0  NaN  7  9.0  b
4  e  5.0  2.0  1  2.0  b
5  f  NaN  3.0  0  NaN  b

def check(df):
    for column in df:
        if df[column].isnull().sum() > 2:
            df.drop(column,axis=1,inplace=True)
    return df

print (df.pipe(check))
   A  D    E  F
0  a  1  5.0  a
1  b  3  3.0  a
2  c  5  6.0  a
3  d  7  9.0  b
4  e  1  2.0  b
5  f  0  NaN  b

dawei

【声明】:丽水站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章