python - 如何删除数据框中某些完整率较低的特征(Python)

标签 python pandas dataframe

我有一个包含 450 多个变量和 500 000 多行的数据框。但是,有些变量的空值超过90%。我想删除空行超过 90% 的特征。

我描述了我的变量:

数据框:

df = pd.DataFrame({
    'A':list('abcdefghij'),
     'B':[4,np.nan,np.nan,np.nan,np.nan,np.nan, np.nan, np.nan, np.nan, np.nan],
     'C':[7,8,np.nan,4,2,3,6,5, 4, 6],
     'D':[1,3,5,np.nan,1,0,10,7, np.nan, 5],
     'E':[5,3,6,9,2,4,7,3, 5, 9],
     'F':list('aaabbbckfr'),
     'G':[np.nan,8,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan, np.nan, np.nan]})

print(df)
   A    B  C   D  E  F    G
0  a  4.0  7   1  5  a  NaN
1  b  NaN  8   3  3  a  8.0
2  c  NaN  NaN 5  6  a  NaN
3  d  NaN  4  NaN 9  b  NaN
4  e  NaN  2   1  2  b  NaN
5  f  NaN  3   0  4  b  NaN
6  g  NaN  6  10  7  c  NaN
7  h  NaN  5   7  3  k  NaN
8  i  NaN  4  NaN 5  f  NaN
9  j  NaN  6   5  9  r  NaN

描述:

desc = df.describe(include = 'all')
d1 = desc.loc['varType'] = desc.dtypes
d3 = desc.loc['rowsNull'] = df.isnull().sum()
d4 = desc.loc['%rowsNull'] = round((d3/len(df))*100, 2)

print(desc)
                A        B        C        D        E       F        G
count          10        1       10       10       10      10        1
unique         10      NaN      NaN      NaN      NaN       6      NaN
top             i      NaN      NaN      NaN      NaN       b      NaN
freq            1      NaN      NaN      NaN      NaN       3      NaN
mean          NaN        4      5.4      4.3      5.3     NaN        8
std           NaN      NaN  2.22111  3.16403  2.45176     NaN      NaN
min           NaN        4        2        0        2     NaN        8
25%           NaN        4        4      1.5     3.25     NaN        8
50%           NaN        4      5.5      4.5        5     NaN        8
75%           NaN        4     6.75      6.5     6.75     NaN        8
max           NaN        4        9       10        9     NaN        8
varType    object  float64  float64  float64  float64  object  float64
rowsNull        0        9        1        2        0       0        9
%rowsNull       0       90       10       20        0       0       90

在这个例子中,我们只有 2 个特征来删除“B”和“G”。 但就我而言,我发现 40 个变量的“%rowsNull”大于 > 90%,我应该如何在我的建模中不考虑这些变量?

我不知道该怎么做。

请帮帮我。

谢谢。

最佳答案

首先比较缺失值,然后得到 mean(之所以有效,是因为 True 处理得像 1),最后用 boolean indexing 过滤loc,因为删除列:

df = df.loc[:, df.isnull().mean() <.9]
print (df)
   A    C     D  E  F
0  a  7.0   1.0  5  a
1  b  8.0   3.0  3  a
2  c  NaN   5.0  6  a
3  d  4.0   NaN  9  b
4  e  2.0   1.0  2  b
5  f  3.0   0.0  4  b
6  g  6.0  10.0  7  c
7  h  5.0   7.0  3  k
8  i  4.0   NaN  5  f
9  j  6.0   5.0  9  r

详细信息:

print (df.isnull().mean())
A    0.0
B    0.9
C    0.1
D    0.2
E    0.0
F    0.0
G    0.9
dtype: float64

关于python - 如何删除数据框中某些完整率较低的特征(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53190627/

相关文章:

python - 将 Python 扩展安装到特定位置

python - Pandas 将两列与空值结合起来

python - 为什么我的多索引数据框有重复的索引值?

python - 如何在 Pandas 中将月度数据转换为季度数据

python - 集成控制系统运行不正常

python - 手动安排Azure中Postgresql的备份?

python - 进程重新启动时内存未回收

python - 在 python 3.4、ubuntu 15.10 上使用 pip 安装 pandas 时出错

python - 尝试将 DataFrame 写入 Feather 时出错。 feather 是否支持列表列?

pandas - Pandas DataFrame.assign参数