最流行的开源数据分析,处理和可视化工具pandas的未来

pandas是一个功能强大的开源Python库,用于数据分析,处理和可视化,当前版本:0.23.4。用户在1000万左右,并成为Python数据科学工具包中的“必须使用”的工具。

许多数据科学家都向我提出过​​这样的问题:

pandas 可靠吗?

以后还会维护么?

为什么没有发布1.0版本!

版本号可用于表示产品的成熟度。但在开源世界中,版本号并不一定能告诉关于库的成熟度或可靠性的信息。 实际上 pandas既成熟又可靠!不过版本号传达了API的稳定性。

走向pandas 1.0

  • 推荐使用方法链

不使用方法链的例子:

import pandas

df = pandas.read_csv('data/titanic.csv.gz') 

df = df[df.Age < df.Age.quantile(.99)] 

df['Age'].fillna(df.Age.median(), inplace=True) 

df['Age'] = pandas.cut(df['Age'], 

                      bins=[df.Age.min(), 18, 40, df.Age.max()],

                      labels=['Underage', 'Young', 'Experienced'])

df['Sex'] = df['Sex'].replace({'female': 1, 'male': 0}) 

df = df.pivot_table(values='Sex', columns='Pclass', index='Age', aggfunc='mean') 

df = df.rename_axis('', axis='columns') 

df = df.rename('Class {}'.format, axis='columns') 

df.style.format('{:.2%}') 

使用方法链的例子:

import pandas

(pandas.read_csv('data/titanic.csv.gz')

      .query('Age < Age.quantile(.99)')

      .assign(Sex=lambda df: df['Sex'].replace({'female': 1, 'male': 0}),

              Age=lambda df: pandas.cut(df['Age'].fillna(df.Age.median()),

                                        bins=[df.Age.min(), 18, 40, df.Age.max()],

                                        labels=['Underage', 'Young', 'Experienced']))

      .pivot_table(values='Sex', columns='Pclass', index='Age', aggfunc='mean')

      .rename_axis('', axis='columns')

      .rename('Class {}'.format, axis='columns')

      .style.format('{:.2%}'))

他们更喜欢方法链的主要原因是:可读性和性能。不过实际上长方法链的可读性不太好。参考资料:https://tomaugspurger.github.io/method-chaining.html

  • 不建议使用inplace

pandas核心团队不鼓励使用inplace参数,最终会删除inplace。原因如下:

inplace在方法链中不起作用;使用inplace通常不会阻止创建副本;删除inplace选项会降低pandas代码库的复杂性。

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

如果您想了解更多关于如何在熊猫中管理内存的话,我建议您观看Marc演讲的这个5分钟部分。

  • Apache Arrow

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

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

Arrow最终用作pandas后端可能在pandas 1.0之后,对于pandas最终用户来应该是是透明的。但会带来更好的性能,并且支持在pandas中使用大于内存的数据集。

  • 扩展数组

Extension Arrays允许您创建用于pandas的自定义数据类型。

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

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

  • 其他弃用

ix访问器已在0.20版本中弃用,请使用loc和iloc。

在版本0.20中也弃用了三维数据的Panel数据结构,而支持具有MultiIndex的DataFrame。

DataFrame主要为缺失值时,SparseDataFrame可能会在即将发布的版本中弃用。 (但是您应该能够将数据存储在常规DataFrame中。)

2019年1月起从pandas放弃Python 2支持!

参考资料

0.23.4是最近发布的大熊猫(2018年8月)。

根据GitHub的里程碑,0.24的目标是2018年底。

0.25:2019年初的目标,它将1.0中的所有弃用内容进行警告。

1.0将与0.25相同,但将删除所有已弃用的功能。

参考资料

links