数据分析师也要学会写漂亮的Python函数

在编程语言中,写函数就像是制作一个魔术箱,进去一个东西,出来另外一个东西,像是变了个魔术一样神奇。

但作为数据分析师,真是不爱写函数,清洗数据?那就按部就班的做就好了,见招拆招,为啥要费脑筋写那个函数呢?

写函数的优点

  • 结构更清晰,可读性好,降低修改维护成本
  • 代码复用性高,可提升效率

教你写简单的函数

写一个实现数据清洗处理的函数,能够让这些脏脏的字符串,洗白白了输出,显示为整洁的首字母大写,其他字母小写的规整的字符串。

# 这是一些待清洗处理的字符串
In [245]: strings = ['  Alabama ','Georgial!','Geogia','FlOrIda', 
     ...: 'south    carolina##','West virginia?']   

In [244]: def clean_strings(strings): 
     ...:     result = [] 
     ...:     for value in strings: 
                  # 去掉字符串前、后多余的空格
     ...:         value = value.strip() 
                  # 去掉字符串中的标点符号
     ...:         value = re.sub('[!#?]','',value)                  
     ...:         print(value,value.title(),'\n') 
                  # 将字符串转化为title模式,首字母大写,其余小写
     ...:         value = value.title() 
     ...:         result.append(value) 
     ...:     return result 

教你写高级的函数

把清洗数据的大函数拆解为更细颗粒度的函数。

  • 去除空格:str对象自带的strip方法可以实现这个功能,无需我们编写,直接调用str.strip()就可以了
  • 去除标点符号:这个功能需要我们自己编写一下
  • title样式的字符:str对象的title()方法可以实现这个功能,也是直接调用str对象的title()方法
# 编写一个去除特殊符号的函数
In [248]: def remove_punctuation(value): 
     ...:     return re.sub('[#?]','',value) 
     ...:                                                                       

In [249]: clean_ops = [str.strip, remove_punctuation, str.title]                

In [250]: type(clean_ops)                                                       
Out[250]: list

In [251]: clean_ops                                                             
Out[251]: 
[<method 'strip' of 'str' objects>,
 <function __main__.remove_punctuation(value)>,
 <method 'title' of 'str' objects>]

In [256]: def clean_strings(strings,ops): 
     ...:     result = [] 
     ...:     for value in strings: 
                  # 注意ops参数是可迭代的
     ...:         for function in ops: 
     ...:             print(value, function,function(value),'\n') 
     ...:             value = function(value) 
     ...:         result.append(value) 
     ...:     return result 
     ...:

最下面这个clean_strings()高明之处就在于,实现的功能是输入字符串参数,输入想要做的处理参数,就可以按照指定的功能进行清洗。

你可以这么调用,一次性对strings变量实现3种操作,即clean_ops种的strip(),remove_punctuation(),title()。

In [253]: clean_strings(strings, clean_ops)

当然也可以只对字符串实施去空格操作,这时候传参可以直接用[str.strip]

In [258]: clean_strings(strings,[str.strip])    

数据分析师日后也还要多写函数,提升自己的代码设计能力哦⛽️

关注微信公众号:“数据分析师之家
数据分析师也要学会写漂亮的Python函数_第1张图片

你可能感兴趣的:(Python神器)