加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:22:21 所属栏目:Python 来源:网络整理
导读:我想写一个程序,如果它超过特定数量的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
我想写一个程序,如果它超过特定数量的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读