是否大量使用自定义函数是区分编程小白和老手的重要指标。
虽然在处理数据时,使用自定义函数能够大大缩减时间,并且达到一些别的方法没法完成的效果。在熟练的数据分析员代码里,大部分的篇幅都是在定义函数,而最后的应用只占很小的篇幅。
apply()是对DataFrame里的每行或列进行函数应用。
applymap()是对DataFrame里的每个元素进行函数的应用。
map()是对Series里(就是单独的一列)的每个元素进行函数应用。

把price和total_price两列改成两位小数的浮点数:

需要注意的是使用lambda保留两位小数之后的数据是object类型的,而不是浮点型,需要经过转换之后才能变成浮点型。
其它列都不是数值,不能使用保留两位小数的函数,所以只能对这两列进行使用。
如果只对一列进行处理需要使用map(),用其它的函数会报错:

还可以把修改后的结果赋值到源数据:

lambda在这里其实是在定义一个简单的函数,一个没有函数名的函数。
还可以先对某一列进行操作之后在进行保留两位小数:

以上的操作之后数据类型都变成object,而不是浮点数或者整数类型,因此我们需要将其转换成浮点数或者整数(使用.convert_objects(convert_numeric=True)来进行转换):

然后就可以使用运算符进行计算了:

不过使用.convert_objects(convert_numeric=True)转换后进行计算不是Python推荐的使用方法,Python推荐使用的是pd.to_numeric的方法:


对转换后的数据进行计算:

不过这个方式一次只能改一个列,而不是选择多列统一进行更改。
那么如果我们要在把每一列的数值都进行计算,然后在最底下加上一行总计要怎么操作呢?
这个使用就不能使用lambda函数了,而是需要进行自定义函数(当然也可以使用前面说过的方法),先定义一个求和的函数:

如果是想要对行进行计算的话只需要添加参数axis=1就可以了。
还有一点需要注意的是:pandas自带的函数不要用apply(),map()等这些函数,只需要直接一个点‘.’就可以了。
网友评论