大多数数据科学家不使用的高级 Pandas 模式

学习方法链接、pipe()、高效联接、优化的 groupby 操作和向量化逻辑,以编写更快、更清晰的 pandas 代码

来源:KDnuggets

简介

大多数数据科学家通过阅读教程和复制有效的模式来学习 Pandas。

这对于入门来说很好,但它通常会导致初学者养成坏习惯。使用 iterrows() 循环、中间变量赋值和重复的 merge() 调用是一些代码示例,这些代码在技术上是准确的,但速度比必要的慢,并且比应有的更难以阅读。

下面的模式不是边缘情况。它们涵盖了数据科学中最常见的日常操作,例如过滤、转换、连接、分组和计算条件列。

在每个方法中,都有一个通用方法和一个更好的方法,区别通常在于意识而不是复杂性。

这六个影响最大:方法链接、pipe() 模式、高效连接和合并、groupby 优化、向量化条件逻辑和性能陷阱。

方法链接

中间变量可以使代码感觉更有条理,但通常只会增加噪音。方法链接允许您将一系列转换编写为单个表达式,这样可以自然地读取并避免命名不需要唯一标识符的对象。

而不是这个:

df1 = df[df['状态'] == '活动']

df2 = df1.dropna(子集=['收入'])

df3 = df2.assign(revenue_k=df2['revenue'] / 1000)

结果 = df3.sort_values('revenue_k', ascending=False)

你这样写:

结果 = (

df

.query("状态=='活动'").dropna(子集=['收入']).assign(revenue_k=lambda x: x['revenue'] / 1000).sort_values('revenue_k', 升序=False))allocate() 中的 lambda 在这里很重要。链接时,无法通过名称访问DataFrame的当前状态;你必须使用 lambda 来引用它。链断裂的最常见原因是忘记这一点,这通常会导致名称错误或对脚本中先前定义的变量的过时引用。Pipe() 模式高效的联接和合并修复的是验证参数: