我有一个由135列组成的数据集。我试图删除空数据超过60%的列。大约有40列。所以,我写了一个函数来删除这个空列。但是我得到了#34;不包含在轴中#34;错误。有人可以帮我解决这个问题吗?或者任何其他方式一次删除这40列?
我的功能:
list_drop = df.isnull().sum()/(len(df))
def empty(df):
if list_drop > 0.5:
df.drop(list_drop,axis=1,inplace=True)
return df
我试过的其他方法:
df.drop(df.count()/len(df)<0.5,axis=1,inplace=True)
答案 0 :(得分:0)
您可以使用isnull
+ sum
,然后使用掩码过滤df.columns
。
m = df.isnull().sum(0) / len(df) < 0.6
df = df[df.columns[m]]
<强>演示强>
df
A B C
0 29.0 NaN 26.6
1 NaN NaN 23.3
2 23.0 94.0 28.1
3 35.0 168.0 43.1
4 NaN NaN 25.6
5 32.0 88.0 31.0
6 NaN NaN 35.3
7 45.0 543.0 30.5
8 NaN NaN NaN
9 NaN NaN 37.6
10 NaN NaN 38.0
11 NaN NaN 27.1
12 23.0 846.0 30.1
13 19.0 175.0 25.8
14 NaN NaN 30.0
15 47.0 230.0 45.8
16 NaN NaN 29.6
17 38.0 83.0 43.3
18 30.0 96.0 34.6
m = df.isnull().sum(0) / len(df) < 0.3 # 0.3 as an example
m
A False
B False
C True
dtype: bool
df[df.columns[m]]
C
0 26.6
1 23.3
2 28.1
3 43.1
4 25.6
5 31.0
6 35.3
7 30.5
8 NaN
9 37.6
10 38.0
11 27.1
12 30.1
13 25.8
14 30.0
15 45.8
16 29.6
17 43.3
18 34.6