熊猫打印缺少值的列名称并仅计数

时间:2020-01-22 15:58:47

标签: python-3.x pandas missing-data

我正在使用以下代码来打印缺失值计数和列名。

#Looking for missing data and then handling it accordingly
def find_missing(data):
# number of missing values
count_missing = data_final.isnull().sum().values
# total records
total = data_final.shape[0]
# percentage of missing
ratio_missing = count_missing/total
# return a dataframe to show: feature name, # of missing and % of missing
return pd.DataFrame(data={'missing_count':count_missing, 'missing_ratio':ratio_missing}, 
index=data.columns.values)
find_missing(data_final).head(5)

我要做的是仅打印那些缺少值的列,因为我有大约150列的庞大数据集。

数据集如下

A     B      C      D
123   ABC    X      Y
123   ABC    X      Y
NaN   ABC    NaN   NaN
123   ABC    NaN   NaN
245   ABC    NaN   NaN
345   ABC    NaN   NaN

在输出中,我只想看看:

     missing_count   missing_ratio
C    4               0.66
D    4               0.66

而不是A和B列,因为那里没有缺失值

3 个答案:

答案 0 :(得分:2)

DataFrame.isnaDataFrame.sum一起使用 按进行计数。我们也可以使用DataFrame.isnull代替DataFrame.isna

new_df = (df.isna()
            .sum()
            .to_frame('missing_count')
            .assign(missing_ratio = lambda x: x['missing_count']/len(df))
            .loc[df.isna().any()] )
print(new_df)

我们也可以使用pd.concat代替DataFrame.assign

count = df.isna().sum()
new_df = (pd.concat([count.rename('missing_count'),
                     count.div(len(df))
                          .rename('missing_ratio')],axis = 1)
             .loc[count.ne(0)])

输出

   missing_count  missing_ratio
A              1       0.166667
C              4       0.666667
D              4       0.666667

答案 1 :(得分:1)

IIUC,我们可以将缺失和总数计数分配给两个变量,以进行一些基本数学运算并分配回df。

a = df.isnull().sum(axis=0)

b = np.round(df.isnull().sum(axis=0) / df.fillna(0).count(axis=0),2)


missing_df = pd.DataFrame({'missing_vals' : a,
             'missing_ratio' : b})

print(missing_df)
   missing_vals  ratio
A             1   0.17
B             0   0.00
C             4   0.67
D             4   0.67

您可以过滤掉没有缺失值的列

missing_df = missing_df[missing_df.missing_vals.ne(0)]
print(missing_df)
missing_vals  ratio
A             1   0.17
C             4   0.67
D             4   0.67

答案 2 :(得分:1)

您也可以使用concat

s = df.isnull().sum()
result = pd.concat([s,s/len(df)],1)
result.columns = ["missing_count","missing_ratio"]
print (result)

   missing_count  missing_ratio
A              1       0.166667
B              0       0.000000
C              4       0.666667
D              4       0.666667