In [105]: df = pd.DataFrame(np.random.choice([2,np.nan], (20, 5), p=[0.2, 0.8]), columns=list('abcde'))
In [106]: df
Out[106]:
a b c d e
0 NaN 2.0 NaN NaN NaN
1 NaN NaN 2.0 NaN 2.0
2 NaN 2.0 NaN NaN NaN
3 NaN NaN NaN NaN 2.0
4 NaN 2.0 2.0 NaN NaN
5 NaN NaN NaN NaN NaN
6 NaN 2.0 NaN NaN NaN
7 2.0 2.0 NaN NaN NaN
8 2.0 2.0 NaN NaN NaN
9 NaN NaN NaN NaN NaN
10 NaN 2.0 2.0 NaN 2.0
11 NaN NaN NaN 2.0 NaN
12 2.0 NaN NaN 2.0 NaN
13 NaN NaN NaN 2.0 NaN
14 NaN NaN NaN 2.0 2.0
15 NaN NaN NaN NaN NaN
16 NaN 2.0 NaN NaN NaN
17 2.0 NaN NaN NaN 2.0
18 NaN NaN NaN 2.0 NaN
19 NaN 2.0 NaN 2.0 NaN
In [107]: df.isnull().mean()
Out[107]:
a 0.80
b 0.55
c 0.85
d 0.70
e 0.75
dtype: float64
解决方案:
In [108]: df.columns[df.isnull().mean() < 0.8]
Out[108]: Index(['b', 'd', 'e'], dtype='object')
In [109]: df[df.columns[df.isnull().mean() < 0.8]]
Out[109]:
b d e
0 2.0 NaN NaN
1 NaN NaN 2.0
2 2.0 NaN NaN
3 NaN NaN 2.0
4 2.0 NaN NaN
5 NaN NaN NaN
6 2.0 NaN NaN
7 2.0 NaN NaN
8 2.0 NaN NaN
9 NaN NaN NaN
10 2.0 NaN 2.0
11 NaN 2.0 NaN
12 NaN 2.0 NaN
13 NaN 2.0 NaN
14 NaN 2.0 2.0
15 NaN NaN NaN
16 2.0 NaN NaN
17 NaN NaN 2.0
18 NaN 2.0 NaN
19 2.0 2.0 NaN
a b c d e f g h i j
0 NaN NaN NaN NaN NaN 2.0 NaN NaN NaN 2.0
1 NaN 2.0 NaN 2.0 NaN NaN 2.0 NaN NaN 2.0
2 NaN NaN 2.0 NaN 2.0 NaN 2.0 2.0 NaN NaN
3 NaN NaN NaN NaN NaN 2.0 NaN NaN NaN 2.0
4 2.0 2.0 2.0 NaN NaN NaN NaN NaN NaN NaN
行数
df.loc[df.isnull().mean(axis=1).lt(0.8)]
a b c d e f g h i j
1 NaN 2.0 NaN 2.0 NaN NaN 2.0 NaN NaN 2.0
2 NaN NaN 2.0 NaN 2.0 NaN 2.0 2.0 NaN NaN
4 2.0 2.0 2.0 NaN NaN NaN NaN NaN NaN NaN
def rmissingvaluecol(dff, threshold):
l = []
l = list(dff.drop(dff.loc[:,list((100*(dff.isnull().sum()/len(dff.index)) >= threshold))].columns, 1).columns.values)
print("# Columns having more than %s percent missing values: "%threshold, (dff.shape[1] - len(l)))
print("Columns:\n", list(set(list((dff.columns.values))) - set(l)))
return l
rmissingvaluecol(df,80) # Here threshold is 80% which means we are going to drop columns having more than 80% of missing values
# Output
'''
# Columns having more than 60 percent missing values: 2
Columns:
['id', 'location']
'''
9条答案
按热度按时间ni65a41a1#
演示:
设置:
解决方案:
bejyjqdl2#
您可以使用Pandas' dropna()。
dxxyhpgq3#
按照MaxU的示例,这是用于筛选行的选项:
行数
laik7k3q4#
要在Pandas中进行泛化,您可以执行以下操作来计算具有缺失值的列中的值的百分比。从这些列中,您可以过滤掉具有超过80% NULL值的特性,然后从DataFrame中删除这些列。
mpgws1up5#
这里有一个简单的函数,你可以通过传递一个dataframe和一个threshold直接使用
现在创建一个新的dataframe,排除这些列:
奖励步骤
您可以查找每列缺失值的百分比(可选)
ux6nzvsh6#
计算NaN和或按列计算百分比的最快方法是:
llmtgqce7#
vdzxcuhz8#
用途:
这里我们从缺失值大于5的行中删除缺失值。
o4hqfura9#
根据文档,关于dropna()有一点:thresh 参数指定要保留的非NaN的数量。