数据挖掘使用apply函数对数据的处理(python)
前段时间在搞一个数据挖掘之类的比赛,发现对数据进行预处理时,大家使用比较多的是apply函数,apply函数是pandas库中的函数,非常好用的一个函数相当于循环遍历,起到对每一条数据进行处理的效果。
说到apply又不得不说lambda函数了,这两个结合来用简直爽的不行。
lambda关键字可以用来创建一个小的匿名函数
示例:DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), *kwds)
第一个参数func是一个函数,需要自己实现,可以使用lambda匿名函数,axis默认值为0,axis为0时,会把一列的数据进行遍历。
data['cut_review'].apply(lambda x: [i for i in x s if i not in stopwords])
上面就是我做比赛的一些例子,对data留言这一列使用apply函数,可以对每一行进行去除停用词操作,就是循环去掉每一条留言中没用的词。
lambda函数在这里可以看出就是对每一条数据进行替换操作,x由后面的列表推导式替换。
然后还有下面这种用法,上面那个循环用法是处理数据比较常用的,接下这种是网上大多数博客都有的,反正在很多介绍apply函数的博客都能找到这些代码,那我随便给一个好了。
他们这个代码类似就是针对一个二维表的,axis为0时,会以列为单位,对一列应用函数,再赋值给一列,其实也一样,只不过代码的匿名函数是求一列最大最小值的相乘,就是求一个数,再赋值给列属性,而我遍历处理数据则需要处理每一个数据再把每一个处理后的数据赋值给列属性而已。然后axis=1时,就是反过来看而已,对每一行的数据进行处理,这里也是求最大最小值的相乘,然后直接赋值就行了。
下面是代码:
代码在这里面,自己去找吧
上面的apply函数是pandas中的,那么接下来这个是在python中的,格式为:apply(func,*args,**kwargs)func是需要实现的函数,后面的args则是函数需要接受的参数,是一个元组的形式,kwargs则是一个带有关键字的字典,kwargs也可以传递参数,键对应着函数的参数列表,如果利用kwargs传递了参数,则args就不能传递相应的参数了。
def function(a,b):
print(a,b)
apply(function,('good','better'))
apply(function,(2,3+6))
apply(function,('cai','quan'))
apply(function,('cai',),{'b':'caiquan'})
apply(function,(),{'a':'caiquan','b':'Tom'}) `