我正在使用以下代码来打印缺失值计数和列名。
#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列,因为那里没有缺失值
答案 0 :(得分:2)
将DataFrame.isna
与DataFrame.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