由于Python的函数是对象,很多在其他语言中比较难的构造在Python中非常容易实现,例如在数据清洗中,我们需要将一些变形应用到下列字符串列表中:
data = ['Alabama','Georgia!','Georgia','georgia','FlorIda',
'south carolina##','West virginia?']
为了使这些数据整齐、可用于分析,有很多事情需要做:去除空格,移去标点符号,调整适当的大小写。有两种方法可以清洗,种方式是使用内建的字符串方法,结合标准库中的正则表达式模块re:
import re
def clean_strings(strings):
result = []
for value in strings:
value = value.strip()
value = re.sub('[!#?]','',value)
value = value.title()
result.append(value)
return result
结果如下:
clean_strings(data)
['Alabama',
'Georgia',
'Georgia',
'Georgia',
'Florida',
'South Carolina',
'West Virginia']
还有另外一种方法会让你觉得有用的实现就是将特定的列表操作应用到某个字符串的集合上:
def a_data(value):
return re.sub('[!#?]','',value)
clean_ops = [str.strip, a_data, str.title]
def clean_s(strings,ops):
result = []
for value in strings:
for function in ops:
value = function(value)
result.append(value)
return result
结果如下:
clean_s(data,clean_ops)
['Alabama',
'Georgia',
'Georgia',
'Georgia',
'Florida',
'South Carolina',
'West Virginia']
像这种更为函数化的模式可以使你在更高层次上方便地修改字符串变换方法。clean_strings函数现在也具有更强的复用性和通用性。
当然你也可以将函数作为一个参数传给其他的函数,比如内建的map函数,可以将一个函数应用到一个序列上:
for data_a in map(a_data,data):
print(data_a)
Alabama
Georgia
Georgia
georgia
FlorIda
south carolina
West virginia
下一节将介绍匿名函数。