DRP*_*RPR 6 python data-analysis dataframe python-3.x pandas
我想写一个程序,如果它超过特定数量的NA值,就会删除一列.这就是我所做的.
def check(x):
for column in df:
if df.column.isnull().sum() > 2:
df.drop(column,axis=1)
Run Code Online (Sandbox Code Playgroud)
在执行上述代码时没有错误,但在执行操作时 df.apply(check),会出现大量错误.
PS:我知道关于thresh的争论 df.dropna(thresh,axis)
有什么提示吗?为什么我的代码不起作用?
谢谢
我认为这里最好是dropna与参数一起使用thresh:
阈值:整数,可选
需要那么多非 NA 值。
因此,对于向量化解决方案,从 的长度中减去它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
Run Code Online (Sandbox Code Playgroud)
我建议使用DataFrame.pipeapply 函数来DataFrame更改df.column输入df[column],因为变量中的动态列名称的点表示法失败(它尝试选择列名称column):
df = pd.DataFrame({'A':list('abcdef'),
'B':[np.nan,np.nan,np.nan,5,5,np.nan],
'C':[np.nan,8,np.nan,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,np.nan],
'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
Run Code Online (Sandbox Code Playgroud)