龙空技术网

Pandas发展规划

Python部落 3227

前言:

今天你们对“td算法lambda1”大体比较关心,大家都需要知道一些“td算法lambda1”的相关知识。那么小编在网上搜集了一些对于“td算法lambda1””的相关资讯,希望看官们能喜欢,同学们快快来了解一下吧!

Pandas是一个功能强大的开源Python库,用于数据分析,操作和可视化。 自2014年以来,我一直在教数据科学家使用pandas,从那时起,它已经越来越受欢迎,估计有500万到1000万用户,并成为Python数据科学工具包中的“必须使用”的工具。

我是在版本0.14.0左右开始使用pandas,并且我已经关注了pandas库,因为它的当前版本0.23.4已经非常成熟。 但是多年来,许多数据科学家都向我提出过这样的问题:

“Pandas可靠吗?”“它将来会继续工作吗?”“它有问题吗?他们甚至没有发布1.0版本!”

版本号可用于表示产品的成熟度,因此我理解为什么有人可能会犹豫是否依赖“1.0之前的”软件。 但在开源世界中,版本号并不一定能告诉你任何关于库的成熟度或可靠性的信息。(是的,Pandas库既成熟又可靠!)相反,版本号传达了API的稳定性。

特别是,版本1.0向用户发出信号:“我们已经弄清楚API应该是什么样子,因此只有主要版本(2.0,3.0等)才会发生API破坏性更改”,换句话说,版本1.0标志着代码永远不应该仅仅因为升级到下一个次要版本就导致中断。

所以问题仍然存在:Pandas1.0中会出现什么,它什么时候到来?

走向pandas 1.0

我最近观看了Pyrad London的一个名为Towards pandas 1.0的演讲,由Pandas核心开发人员Marc Garcia发表。 关于Pandas的未来,这是一个启发性的讨论,所以我想强调并评论一些提到的项目:

方法链inplaceApache Arrow可拓数组其他弃用路线图

如果你想跟随完整的谈话幻灯片,可以在这个Jupyter notebook中找到它们。()

方法链

Pandas核心团队现在鼓励使用“方法链”。 这是一种编程风格,您可以将多个方法调用链接到一个语句中。 这允许您将中间结果从一个方法传递到下一个方法,而不是使用变量存储中间结果。

以下是Marc实现的不使用方法链的示例:

以下是使用方法链的等效代码:

他们更喜欢方法链的主要原因是:

可读性:在他们看来,方法链更具可读性。性能:由于方法链提前告诉Pandas您想要做的一切,Pandas可以更有效地规划其操作。

以下是我的想法:

多年来我一直在编写简短的方法链,我发现它们比替代方案更具可读性。 例如,我绝不会通过使用中间变量将df.is.sum或ser.value_counts.sort_index分成多行代码。但是,我实际上发现长方法链(Marc的第二个例子)比其他方法更不易读,但也许那是因为我不习惯写它们。 具体来说,我很难搞懂assign方法中的lambda函数。

另一位pandas核心开发者Tom Augspurger也指出:

“过长链的一个缺点是调试可能会更难。如果最后出现问题,你就没有中间值来检查。”

需要明确的是,pandas一直提供方法链,但通过添加新的“可链式”方法,对链的支持有所增加。 例如,query方法(在上面的链中使用)之前在文档中被标记为“实验性的”,这就是为什么我没有使用它或教它。 该标签已在pandas 0.23中删除,这可能表明核心团队现在鼓励使用query。

我认为您不会被要求使用方法链,但我认为文档最终可能会迁移到使用该样式。

有关该主题的更长时间的讨论,请参阅Tom Augspurger的Method Chaining帖子,该帖子是他的Modern pandas系列的第2部分。()

inplace

pandas核心团队不鼓励使用inplace参数,最终它将被弃用(这意味着“计划从库中删除”)。 原因如下:

inplace在方法链中不起作用。与名称所暗示的相反,使用inplace通常不会阻止创建副本。删除inplace选项会降低pandas代码库的复杂性。

就个人而言,我是inplace的粉丝,我喜欢写df.reset_index(inplace = True)而不是df = df.reset_index。 话虽这么说,许多初学者确实对inplace感到困惑,并且在pandas中有一个明确的方法来做事,所以最终我会同意弃用inplace。

如果您想了解更多关于如何在pandas中管理内存的话,我建议您观看Marc演讲的这个5分钟部分。(;t=700)

Apache Arrow

Apache Arrow是一项“正在进行中的工作”,成为pandas的后端。 Arrow是由pandas创始人Wes McKinney在2015年创建的,用于解决pandas DataFrame的许多潜在局限性(以及其他语言中的类似数据结构)。

Arrow的目标是创建一个开放标准,用于表示原生支持复杂数据格式的表格数据,并针对性能进行了高度优化。尽管Arrow的灵感来自pandas,但它的设计目标是成为跨多种语言的数据科学工作的共享计算基础架构。

因为Arrow是一个基础设施层,它最终用作pandas后端(可能在pandas 1.0之后)对于pandas最终用户来说理想上是透明的。但是,它应该会带来更好的性能,并且支持在pandas中使用“大于RAM”的数据集。

关于Arrow的更多细节,我建议阅读Wes McKinney 2017年的博客文章,Apache Arrow和“我讨厌pandas的10件事”,以及观看他在SciPy 2018上的演讲(有幻灯片)。有关如何整合Arrow的详细信息进入pandas,我建议观看Jeff Reback在2017年PyData NYC上的演讲(附幻灯片)。

可拓数组

Extension Arrays允许您创建用于pandas的自定义数据类型。该文档提供了一个很好的总结:

Pandas现在支持存储类似数组的对象,这些对象不一定是1-D NumPy数组作为DataFrame中的列或Series中的值。这允许第三方库实现对NumPy类型的扩展,类似于pandas如何实现分类,具有时区的日期时间,句点和间隔。

换句话说,之前pandas团队必须编写大量自定义代码来实现NumPy本身不支持的数据类型(例如分类)。随着Extension Arrays的发布,现在有一个用于创建任何人都可以使用的自定义类型的通用接口。

pandas团队已经使用此接口编写支持缺失值的整数数据类型,也称为“NA”或“NaN”值。以前,如果您将任何值标记为缺失,则整数列将转换为浮点数。开发文档表明“Integer NA”类型将在下一版本(版本0.24)中提供。

此接口的另一个引人注目的用途是本机字符串类型,因为pandas中的字符串当前使用NumPy的“对象”数据类型表示。 fletcher库已经使用该接口在pandas中启用本机字符串类型,尽管pandas团队最终可能会将自己的字符串类型直接构建到pandas中。

要深入了解此主题,请查看以下资源:

可拓数组用于pandas:博客文章关于使用可拓数组开发cyberpandas。使用自定义类型扩展pandas:关于“整数NA”类型开发的视频(带幻灯片)。使用Apache Arrow和Numba扩展pandas:视频(带幻灯片)通过fletcher开发字符串类型,使用Arrow来存储和Numba来获得更好的性能(如此处所述)。

其他弃用

以下是谈话中讨论的一些其他弃用:

ix访问器已在0.20版本中弃用,支持loc(基于标签的访问)和iloc(基于位置的访问)。在版本0.20中也弃用了三维数据的Panel数据结构,而支持具有MultiIndex的DataFrame。当DataFrame主要包含缺失值时,SparseDataFrame将在即将发布的版本中弃用。将于2019年1月从pandas中删除Python 2支持!

路线图

根据谈话,这是pandas1.0的路线图:

0.23.4是最近发布的pandas(2018年8月)。根据GitHub的里程碑,0.24的目标是2018年底。0.25是针对2019年初的目标,它将警告1.0中的所有弃用。1.0将与0.25相同,但将删除所有已弃用的功能。

关于路线图的更多细节可以在2018年7月的pandas冲刺记录中找到,但所有这些计划都可能有所变化。

英文原文:

译者:赵四妹

标签: #td算法lambda1