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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Python相关文章