Pandas搭配lambda组合使用详解

  • Post category:Python

Pandas搭配Lambda组合使用详解

在使用Pandas进行数据操作时,需要对数据进行筛选、转换、分组等复杂操作。其中,Lambda表达式是一种常用的函数式编程语法,可以简化这些操作。本文将详细讲解在Pandas中如何使用Lambda表达式进行数据操作。

Lambda表达式基础

Lambda表达式是一种匿名函数,可以在一行代码中完成简单的函数定义。其语法格式为:

lambda argument1, argument2, ... : expression

其中,argument1, argument2, …为函数的参数,expression为函数的返回值。例如,下面的Lambda表达式定义了一个函数,将输入数值乘以2:

double = lambda x: x * 2
print(double(3))  # 输出6

Pandas中的Lambda操作

apply方法

在Pandas中,我们可以使用apply方法对数据进行Lambda操作。apply方法可以在DataFrame或Series中应用一个函数,以实现数据的筛选、转换或分组操作。以下是apply方法的基本语法:

df.apply(lambda x: function(x))

其中,df是DataFrame或Series,x是df中的每一个行或列,function是一个自定义函数。

示例1: 数据筛选

假设我们有一个学生成绩的DataFrame,其中包含了每一个学生的名字、成绩和性别。现在,我们需要筛选出成绩高于80分的女生信息。可以使用以下的代码:

import pandas as pd

data = [
    ["Tom", 77, "M"], ["Lisa", 85, "F"],
    ["Jack", 92, "M"], ["Mary", 79, "F"]
]
df = pd.DataFrame(data, columns=["Name", "Score", "Gender"])

filtered = df[df.apply(
    lambda x: x.Score > 80 and x.Gender == "F", axis=1)]

print(filtered.head())

上述代码中,我们使用了apply方法和Lambda表达式同时作用于每一行数据。其中,axis=1指定了在行上运行Lambda表达式。由于apply方法返回的是一个bool类型的Series,因此filtered中只包含了满足条件的行。

示例2: 数据转换

现有一个DataFrame,数据中包含了每个学生的名字和成绩。我们需要将成绩从百分制转换为等级制,分别为“优秀”、“良好”、“及格”以及“不及格”。可以使用以下的代码:

import pandas as pd

data = [
    ["Tom", 77], ["Lisa", 85],
    ["Jack", 92], ["Mary", 79]
]
df = pd.DataFrame(data, columns=["Name", "Score"])

df["Grade"] = df.apply(
    lambda x: "优秀" if x.Score >= 90
        else "良好" if x.Score >= 80
        else "及格" if x.Score >= 60 
        else "不及格", axis=1)

print(df.head())

上述代码中,我们将apply方法与Lambda表达式组合应用于每一行数据,生成了一个新的“Grade”列。其中,Lambda表达式使用了三目运算符,根据成绩的不同范围返回不同的等级。

总结

本文介绍了在Pandas中使用Lambda表达式的方法,并给出了两个示例。通过Lambda表达式,我们可以在Pandas中更为灵活地对数据进行操作。