Pandas中对Pandas apply函数使用result_type
在本文中,我们将介绍如何在Pandas中使用result_type参数与apply函数。apply函数是Pandas的一个强大的函数,可以在Pandas数据中的Series、DataFrame列或者DataFrame中的行上应用自定义函数。使用apply函数,能够极大的提高代码的灵活性和处理数据的效率,但是在使用apply函数的时候,需要考虑到函数返回结果的类型,这就需要使用result_type参数。
阅读更多:Pandas 教程
apply函数
先来看一下apply函数的使用,其有以下两种情况:
- 对于Series,apply函数能够在Series上行或者列的切片上应用传递进来的函数;
-
对于DataFrame,apply函数可以将函数应用到DataFrame的各列或者各行。应用的方向可以使用axis参数指定,axis=0代表的是列方向,axis=1代表的是行方向。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 对于DataFrame每一列生成一个Series的内置函数max
df.apply(pd.Series.max, axis=0)
输出结果:
A 3
B 6
dtype: int64
result_type参数
通过使用result_type参数,可以控制apply函数的输出类型。result_type参数有三种类型:
- expand,生成Series或者DataFrame结果;
-
reduce,生成标量结果(经过函数计算后的单个数值结果);
-
broadcast,以原始类型返回结果(删除了维度,仅仅返回数值)。
看一下这三个参数的应用:
- expand
expand是默认情况下的参数类型,它会将函数应用到DataFrame中每一个行或列,结果是一个新的DataFrame,该DataFrame包含了函数最后返回的Series或者DataFrame。如果应用的函数返回的结果是一个Series,那么返回的结果会是DataFrame,其中各列分别是Series结果中的一个元素。
例如:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 对DataFrame中的每一列应用函数lamdba,返回DataFrame
df.apply(lambda col: col + 1, axis=0, result_type='expand')
输出结果:
A B
0 2 5
1 3 6
2 4 7
- reduce
当应用的函数返回标量时,使用reduce参数能够有效地优化性能和减少内存占用。在使用reduce参数时,apply函数返回的结果是一个index值为列名的Series。
例如:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 每一列相加,返回一个DataFrame
df.apply(lambda col: col.sum(), axis=0, result_type='reduce')
输出结果:
A 6
B 15
dtype: int64
- broadcast
broadcast类型返回的结果是原始类型,会删除结果中的一维,只保留结果类型,所以当函数返回一个DataFrame时,它会删除一维,将DataFrame中的所有值作为一个矩阵返回。而如果返回的是一个Series,则不需要转换。
例如:
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 对于每一列返回Series
df.apply(lambda col: col + 1, axis=0, result_type='broadcast')
输出结果:
A [2, 3, 4]
B [5, 6, 7]
dtype: object
总结
本文介绍了如何在Pandas中使用result_type参数与apply函数。apply函数可以在Series或者DataFrame的行或列上应用自定义函数,其返回结果的类型可以使用result_type参数进行控制。result_type有三种类型:expand,reduce以及broadcast。其中,expand是默认类型,返回结果是一个新的DataFrame、Series,当函数返回Series时则返回DataFrame;reduce类型能够优化性能,返回一个Series,其中的值为标量;broadcast返回原始类型,当函数返回DataFrame时,它会删除一维,将DataFrame中的所有值作为一个矩阵返回。根据实际的需求选择不同的result_type类型可大大提高代码的效率。
极客笔记