首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pandas发展规划

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的未来,这是一个启发性的讨论,所以我想强调并评论一些提到的项目:

方法链

inplace

Apache Arrow

可拓数组

其他弃用

路线图

如果你想跟随完整的谈话幻灯片,可以在这个Jupyter notebook中找到它们。(http://nbviewer.jupyter.org/github/datapythonista/towards_pandas_1/blob/master/Towards%20pandas%201.0.ipynb)

方法链

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

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

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

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

可读性:在他们看来,方法链更具可读性。

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

以下是我的想法:

多年来我一直在编写简短的方法链,我发现它们比替代方案更具可读性。 例如,我绝不会通过使用中间变量将df.isnull().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部分。(https://tomaugspurger.github.io/method-chaining.html)

inplace

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

inplace在方法链中不起作用。

与名称所暗示的相反,使用inplace通常不会阻止创建副本。

删除inplace选项会降低pandas代码库的复杂性。

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181230A0A4AP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券