python 也许不需要记那么多函数

文章目录

情景

在处理 UCI machine learning的Diabetes 130 US hospitals for years 1999-2008 数据集时,因为存在缺失值 (缺失值用’?'表示)。所以需要对每个特征的缺失值进行分析。
一开始代码如下,用到unique()和groupby()和size()三个函数

for i in raw_data.columns:
    if raw_data[i].dtype == 'object':  #只有object的列才会出现缺失值
        list = raw_data[i].unique()    #列出该列所有取值
        if '?' in list:                # 取值中有缺失值
            num = raw_data.groupby([i]).size()['?']  #统计该列的缺失值个数
        print("{}  {}  {:.2%}".format(i,num,num / len(raw_data[i]))) #展示缺失值

写完后,突然想,其实不用这些函数也行。改写了代码,只用了一个for循环和计数器。

for i in raw_data.columns:
    if raw_data[i].dtype == 'object':  #只有object的列才会出现缺失值
       num = 0                                                  # 缺失值个数,初始化为0
       for j in raw_data[i]:                                # 遍历该列所有值
                if j ==  '?':                                     # 如果是缺失值
                    num = num + 1                                # 则计数
       print("{}  {}  {:.2%}".format(i,num,num / len(raw_data[i]))) #展示缺失值

感悟

明显用了第一段代码其实更难懂,功能存在冗余,而且需要额外记忆三个函数。
第二段代码则逻辑简单,清晰,可读性高,而且不需要要记忆那么多函数。
其实,只要逻辑清晰,动手实现也是蛮轻松的事情,并不需要太多封装好的函数。
函数经过封装后,确实能提供便利,但它们的针对性可能不强,虽然能实现需求,但同时也存在功能冗余。
而且,记忆太多的函数,还是件痛苦的事情,还是需要练好基本的编程功底,能自己动手实现需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值