一次删除pandas中的多个列

时间:2017-11-19 22:53:14

标签: python pandas

我有一个由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)

1 个答案:

答案 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