私は機能に欠けている値が多い機械学習の問題に取り組んでいます。 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。しかし、可視性については、行ではなく列を増やす方が良いと言いたいと思います。私は答えとして行フィルタも追加しました。 (または、たぶん私はラップトップatmに座っている) –
パンダ以内に一般化するには、列の値のパーセントを計算するために次の操作を行うことができます不足している値。それらの列から、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