def fill_fre_top_5(x): if len(x) <= 5: new_array = np.full(5, np.nan) new_array[0:len(x)] = x return new_array
有些疑惑:参数长度小于等于 5 的时候才有返回值,大于等于 5 的时候不应该是 None 吗?
在流程上不会出现5个以上的情况,因为这个函数是在做了value_counts(),取前五个值后才会调用的。
留意:
value_counts().iloc[0:5,]
流程:
for i,name in enumerate(df[['ind_var1_0','imp_sal_var16_ult1']].columns): ##1.Index Name index_name = df[name][~np.isin(df[name],missSet)].value_counts().iloc[0:5,].index.values ##1.1 If the length of array is less than 5 index_name = fill_fre_top_5(index_name) json_fre_name[name] = index_name
统计的目的是为了计算变量最常出现的值(前五名)以及对应的频数。
当一个变量,假设为收入,出现了超过5个以上不同的值,那么我们只需要对它使用value_count()后取前五位便能达到我们的统计目的,并且其输出的格式也满足了我们后续的入参需求,因此不需要返回None;
但是,如果特征的出现的值少于5个,我们需要把返回的结果进行NA的填充,以对齐其他大于5个值的结果,这时候fill_fre_top_5函数就到了这个作用。
因为传进去的value_count的长度最大等于5
df[name][~np.isin(df[name],missSet)].value_counts().iloc[0:5,]
iloc[0:5,]给限制了
截取iloc[0:5,]越界也不会报错
df['ind_var1_0'].value_counts().iloc[0:5,]
长度只有2
但是不会报错
有多少输出多少:
0 75149
1 871
Name: ind_var1_0, dtype: int64
我的意思是,这样写的话,传来的参数有5个以上,返回的不是None吗?
代码里执行过了 value_count = fill_fre_top_5(value_count),可 value_count 是正常的