本文将讲解 Lambda 方法在 Pandas 数据分析中的应用与要点,掌握要点可显著提升数据分析与挖掘的效率。
导入模块与读取数据
第一步需要导入相关模块与数据集,后续分析基于这些数据进行。
创建新列
通常我们在现有两列的基础上通过简单运算来创建新的一列,例如:
但如果新列需要经过较为复杂的计算,此时就需要引入 Lambda 函数来协助实现。下面先定义一个自定义函数。
不同类别的电影采用了不同的评分规则:例如对“惊悚片”,评分是在“原始评分 + 1”与 10 之间取最小值;对“喜剧”则是在 0 与“原始评分 – 1”之间取最大值。接着通过 apply 与 lambda 将该自定义函数应用到 DataFrame 中。
需要说明 axis 的作用,其中 axis=1 代表按列方向处理,axis=0 代表按行方向处理。
[
]
筛选数据
在 Pandas 中筛选数据相对简单,可以使用 >、<、==、&、|、~ 等运算符,代码示例如下:
但如果我们想筛选出影片名长度大于 5 的部分,单用上述方法会报错,例如:
AttributeError: ‘Series’ object has no attribute ‘split’
此时可以结合 apply 与 lambda 来实现上述功能。
当然如果觉得前述方法略显繁琐,也可以一步到位地实现目标。
例如筛选出票房低于当年平均水平的数据。首先对各年票房的平均值进行汇总,代码如下:
随后定义一个函数,判断某影片的票房是否低于当年平均水平,返回布尔值。
再将其通过 apply 与 lambda 应用于数据集。
筛选数据时,仍然可以使用 .loc 方法,并可与 lambda 搭配使用,例如筛选出评分在 5 到 8 分之间的电影及其票房,代码如下:
转变指定列的数据类型
通常在转变数据类型时使用 astype 方法,例如将列 price 的数据类型转换为整型,代码如下:
若遇到如“12,000”这样的数值,会导致直接转换时报错,因此需要借助 apply 与 lambda 进行数据清洗,代码如下:
方法调用过程的可视化
在处理大规模数据集时,函数调用耗时可能较长,此时需要一个进度条来直观展示处理进度。
可以使用 tqdm 模块,将 apply 替换为 tqdm 的进度感知版本即可,代码如下:
[
]
当 Lambda 遇到 if-else
当然也可以在自定义函数中实现 if-else 逻辑,示例代码如下:
输出结果示例:
10
若存在多组 if-else,代码会显得繁琐。此时仍推荐将自定义函数与 apply、lambda 搭配使用,以提高可读性与复用性。
