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中更为灵活地对数据进行操作。