我正在研究功能中缺少許多值的機器學習問題。有100個功能,我想刪除那些缺少太多值的功能(它可以是缺失值超過80%的功能)。我如何用Python做到這一點。如何在Python中刪除具有太多缺失值的列
p.s.我的數據是一個熊貓數據框。
我正在研究功能中缺少許多值的機器學習問題。有100個功能,我想刪除那些缺少太多值的功能(它可以是缺失值超過80%的功能)。我如何用Python做到這一點。如何在Python中刪除具有太多缺失值的列
p.s.我的數據是一個熊貓數據框。
演示:
設置:
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
好的解決方案一如既往+1。但是,對於可見性,我認爲最好有更多的列而不是行。我也添加了行篩選器作爲答案。 (或者只是我 - 坐在筆記本電腦上) –
爲了大熊貓內推廣,你可以做以下的計算值的百分比在列缺少值。從這些列中,您可以用超過80%的NULL值篩選出功能,然後從DataFrame中刪除這些列。
pct_null = df.isnull().sum()/len(df)
missing_features = pct_null[pct_null > 0.80].index
df.drop(missing_features, axis=1, inplace=True)
繼MaxU例如,這是用於過濾行的選項:
df = pd.DataFrame(np.random.choice([2,np.nan], (5,10), p=[0.2, 0.8]), columns=list('abcdefghij'))
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
你有100%的機率,如果你發佈一些示例數據,你會更快地得到答案,https://stackoverflow.com/help/mcve,例如df.head()。to_dict() –
https://www.google.com/search?q=how+to+remove+columns+with+too+many+missing+values+in+Python&oq=how+to+在+ Python + aqs = chrome..69i57j69i60.1301j0j7&sourceid = chrome&ie = UTF-8中刪除+列+ +太多+很多+缺少+值+ + – Alexander