停止在 Pandas 中编写循环:7 个更快的替代方案可供尝试

在本文中,您将学习如何用 7 种更快的方法替换 pandas 循环,以优化数据处理。

来源:KDnuggets

简介

逐行迭代是 pandas 代码中最常见的性能瓶颈之一。在小型数据集上,它不会被注意到,但对于处理大型数据集,这会产生影响。

pandas 构建在 NumPy 之上,它使用编译的 C 代码一次性对整个数组执行操作。在 Python 中循环行完全绕过了这一点,并将每个操作强制返回到 Python 解释器中——一次一行。

本文介绍了 pandas 中循环的 7 种替代方案,每种方案都适合不同类型的转换。最后,您将清楚地了解根据问题的情况使用哪种工具。

您可以在 GitHub 上获取 Colab 笔记本。

设置示例数据集

我们将在本文中使用真实的电子商务订单数据集:

将 pandas 导入为 pd

将 numpy 导入为 np

np.随机.种子(42)

n = 100_000

类别 = ['电子产品'、'服装'、'家居和厨房'、'体育'、'书籍']

地区 = ['北', '南', '东', '西']

df = pd.DataFrame({

'order_id': 范围(1, n + 1),'customer_age': np.random.randint(18, 70, n),'product_category': np.random.choice(类别, n),'区域': np.random.choice(regions, n),'价格': np.round(np.random.uniform(5.0, 500.0, n), 2),'数量': np.random.randint(1, 10, n),'days_to_ship': np.random.randint(1, 14, n),})显示(df.head())输出:我们现在有一个包含 100,000 行的数据集可供使用。1. 使用向量化运算进行算术对于列上的任何算术或比较,向量化操作应该是您的第一直觉。我们想要做的:计算每个订单的总收入。df['收入'] = df['价格'] * df['数量']display(df[['价格', '数量', '收入']].head())2. 应用条件逻辑函数当您的转换涉及一些无法用普通算术表示的逻辑时,.apply() 可以让您在列或行上传递函数。3. 使用 np.where() 进行二元条件选择正确的工具