详细内容或原文请订阅后点击阅览
大多数数据科学家不使用的高级 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() 模式高效的联接和合并修复的是验证参数:
