Select 包含最有效值的数据框列

Select dataframe columns which contain the most valid values

我有我的数据框:

我想创建这个数据框的一个子集,其中包含最少 NaN 值(即最“有效”值)的列

在这种情况下,我只会 select“A3”列,因为只有一个 NaN,而其他列中有 3 个。

如果有两列(或更多列)具有相同数量的 NaN 值,则只 select 其中一列(例如第一列无关紧要)。

创建数据框的代码:

df = pd.DataFrame({"A1":[np.NaN,1,0,0,np.NaN,0,1,np.NaN,0,0,0,1],
                   "A2":[0,1,np.NaN,0,1,np.NaN,1,0,np.NaN,0,0,1],
                   "A3":[0,1,np.NaN,0,1,0,1,0,0,0,0,2]})
df

您可以在您的列上使用 pd.isnull(df['A']).sum() 并通过一些逻辑来解决问题NaN 最少的列。

参考isnull() function

z = list()
for column in df:
  z.append(pd.isnull(df[column]).sum())

list(df.iloc[:,z.index(min(z))].values)

[0.0, 1.0, nan, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2.0]

您可以使用 pd.isnull.sum() 总结每列中空值的数量,然后使用 .idxmin() 和 select 选择计数最少的列只是数据框中的那一列:

df[pd.isnull(df).sum().idxmin()]

输出:

0     0.0
1     1.0
2     NaN
3     0.0
4     1.0
5     0.0
6     1.0
7     0.0
8     0.0
9     0.0
10    0.0
11    2.0
Name: A3, dtype: float64