在数据科学的学习旅程中,大多数数据科学家不会立即使用Excel。但是Pandas的变换函数对于数据科学家来说是一个非常实用的工具,特别是在Python中进行特征工程时。个人在一次黑客马拉松中开始使用这个功能,当时需要进行特征工程,变换函数的快速工作让感到惊喜。强烈认为将从了解和使用变换函数中受益,因此决定在本文中介绍它。
要学习Python和Pandas在数据科学中的基础知识,请查看这些受欢迎的课程:Python数据科学和Python中Pandas数据分析。
Python的变换函数返回一个经过转换的自产数据框,其中包含了应用其参数中指定的函数后的转换值。这个数据框的长度与传递的数据框相同。变换()方法的参数可以是NumPy函数、字符串函数的名称或用户自定义的函数。
Pandas系列是一个一维的ndarray,带有轴标签。虽然标签不必是唯一的,但它们必须是可哈希的类型。
让通过一个例子来解释。假设想要将数据框中的每个元素乘以10:
# 导入库
import pandas as pd
import numpy as np
# 创建数据框
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c'])
# 应用变换函数
print(df.transform(func=lambda x: x * 10))
为了更好地理解,让分解上述代码的每一行:
变换在特征提取中非常有用。顾名思义,从现有特征中提取新特征。让通过一个例子来理解变换函数的重要性。
这里有一个关于百货商店的数据集:可以看到每个用户购买了多个产品,购买金额各不相同。想知道每个用户的平均购买金额。这有助于为模型创建一个新特征,以更好地理解关系。
这是期望的输出。有多种方法可以做到这一点:
将在本文中实现这两种方法。要了解更多关于2024年要使用的十大机器学习算法,请查看学习机器学习教程。
第一种方法是使用groupby聚合数据,然后使用merge()函数将这些数据重新合并回原始数据框。让来做吧!
现在,困难的部分。如何将这些数据重新组合回原始数据框?将为此任务使用merge()函数。可以在这里和这里阅读更多关于使用Pandas在Python中进行连接和合并的信息。
原始数据框看起来像这样:使用NumPy数组创建Pandas数据框。数组包含按行和列排列的数值数据,并指定列名为‘a’、‘b’和‘c’。
这当然可以完成工作。然而,这是一个多步骤的过程,需要额外的代码来获取所需的数据形式。这个多步骤的过程在资源消耗方面可能是一个问题,在黑客马拉松中,时间是一个主要的限制因素。
可以使用Pandas中的变换函数有效地解决这个问题。
这是一个重要的功能,用于创建特征。相信,它可以成为一个游戏规则改变者!
执行转换后,变换函数保留了与原始数据集相同数量的项目。将依赖于一个非常简单的单行步骤,使用groupby后跟变换:
不能更简单了,对吧?原始数据框看起来与上一步中的类似。
变换函数执行上述操作所需的时间比大型数据框上的第一种方法要少。这是一个显著的优势,与之前使用的方法相比。让用Pandas在Python中演示变换函数。
假设创建了一个包含1,000,000行和3列的随机数据集。现在根据groupby(类似于根据groupby user_id计算所有购买的平均值)计算一列的平均值。
这清楚地表明变换函数比之前的方法快得多。做得很好!
现在,假设想根据另一个列的值创建一个新列。这是正在处理的数据框:
使用Apply函数:
# 应用函数
df['new_column'] = df['existing_column'].apply(lambda x: x * 2)
使用变换函数:
# 变换函数
df = df.assign(new_column=df['existing_column'].transform(lambda x: x * 2))
apply函数发送整个数据框的副本以供操作,因此可以同时操纵所有行或列。
变换函数不支持此功能。它基于轴值操纵单个行或列,并不操纵整个数据框。因此,可以根据需要使用Apply或变换函数。