Pandas中对Pandas apply函数使用result_type

Pandas中对Pandas apply函数使用result_type

在本文中,我们将介绍如何在Pandas中使用result_type参数与apply函数。apply函数是Pandas的一个强大的函数,可以在Pandas数据中的Series、DataFrame列或者DataFrame中的行上应用自定义函数。使用apply函数,能够极大的提高代码的灵活性和处理数据的效率,但是在使用apply函数的时候,需要考虑到函数返回结果的类型,这就需要使用result_type参数。

阅读更多:Pandas 教程

apply函数

先来看一下apply函数的使用,其有以下两种情况:

  1. 对于Series,apply函数能够在Series上行或者列的切片上应用传递进来的函数;

  2. 对于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参数有三种类型:

  1. expand,生成Series或者DataFrame结果;

  2. reduce,生成标量结果(经过函数计算后的单个数值结果);

  3. broadcast,以原始类型返回结果(删除了维度,仅仅返回数值)。

看一下这三个参数的应用:

  1. 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
  1. 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
  1. 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类型可大大提高代码的效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程