为了账号安全,请及时绑定邮箱和手机立即绑定

fill_fre_top_5()函数的返回值问题

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 吗?

正在回答

4 回答

在流程上不会出现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


1 回复 有任何疑惑可以回复我~
#1

虾小断 提问者

非常感谢!
2018-01-17 回复 有任何疑惑可以回复我~

统计的目的是为了计算变量最常出现的值(前五名)以及对应的频数。

当一个变量,假设为收入,出现了超过5个以上不同的值,那么我们只需要对它使用value_count()后取前五位便能达到我们的统计目的,并且其输出的格式也满足了我们后续的入参需求,因此不需要返回None;

但是,如果特征的出现的值少于5个,我们需要把返回的结果进行NA的填充,以对齐其他大于5个值的结果,这时候fill_fre_top_5函数就到了这个作用。



0 回复 有任何疑惑可以回复我~

因为传进去的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

http://img1.sycdn.imooc.com//5a5f56810001802810740236.jpg

1 回复 有任何疑惑可以回复我~

我的意思是,这样写的话,传来的参数有5个以上,返回的不是None吗?

代码里执行过了 value_count = fill_fre_top_5(value_count),可 value_count 是正常的

0 回复 有任何疑惑可以回复我~
#1

JustDoItImooc

因为传进去的value_count的长度最大等于5 1 df[name][~np.isin(df[name],missSet)].value_counts().iloc[0:5,] iloc[0:5,]给限制了 截取iloc[0:5,]越界也不会报错 1 df['ind_var1_0'].value_counts().iloc[0:5,] 长度只有2 但是不会报错 有多少输出多少: 0 75149 1 871 Name: ind_var1_0, dtype: int64 http://img1.sycdn.imooc.com//5a5f56810001802810740236.jpg
2018-01-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

fill_fre_top_5()函数的返回值问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信