ITPub博客

首页 > 大数据 > 数据分析 > 进步神速,Pandas 2.1来了!

进步神速,Pandas 2.1来了!

原创 数据分析 作者:编程学研 时间:2023-09-19 16:44:01 0 删除 编辑

本文将介绍Pandas 2.1中的新功能,探讨关于这个新版本中最有趣的事情。

前言

Pandas 2.1于2023年8月30日发布。跟随本文一起看看这个版本引入了哪些新内容,以及它如何帮助用户改进Pandas的工作负载。它包含了一系列改进和一组新的弃用功能。

Pandas 2.1在Pandas 2.0中引入的PyArrow集成基础上进行了大量改进。本文主要关注了对新功能的支持,这些新功能有望在Pandas 3.0中成为默认功能。接下来将深入了解这对用户意味着什么,本文将详细介绍最重要的改进。

避免在字符串列中使用NumPy对象类型

pandas中的一个主要问题是低效的字符串表示。Pandas团队花了相当长的时间研究了这个问题。第一个基于PyArrow的字符串 dtype在 pandas 1.3中可用。它有潜力将内存使用量减少约70%并提高性能。

Pandas团队决定引入一个新的配置选项,将所有字符串列存储在PyArrow数组中。不再需要担心转换字符串列,它会自动工作。

可以通过以下方式打开此选项:


pd.options.future.infer_string = 
True

这个行为将在 pandas 3.0中成为默认行为,这意味着字符串列将始终由PyArrow支持。必须安装PyArrow才能使用此选项。

PyArrow与NumPy对象 dtype有不同的行为,可能会让人难以详细理解。Pandas团队实现了用于此选项的字符串 dtype,以与NumPy的语义兼容。它的行为与NumPy对象列完全相同。

改进的PyArrow支持

Pandas团队在 pandas 2.0中引入了基于PyArrow的DataFrame。Pandas团队过去几个月的主要目标之一是改进 pandas内部的集成。他们的目标是尽可能简化从基于NumPy的DataFrame切换的过程。他们着重解决了修复性能瓶颈的问题,因为这些问题曾经导致意料之外的减速。

接下来查看一个示例:



import pandas 
as pd

import numpy  as np

df = pd.DataFrame(
    {
         "foo": np.random.randint( 1,  10, ( 1_000_000, )),
         "bar": np.random.randint( 1,  100, ( 1_000_000,)),
    }, dtype= "int64[pyarrow]"
)
grouped = df.groupby( "foo")

本文的DataFrame有100万行和10个组。现在来比较一下 pandas 2.0.3和 pandas 2.1的性能:



# pandas 2.0.3

10.6 ms ±  72.7 µs per loop (mean ± std. dev. of  7 runs,  100 loops each)

# pandas 2.1.0
1.91 ms ±  3.16 µs per loop (mean ± std. dev. of  7 runs,  1, 000 loops each)

这个特定的例子在新版本上快了5倍。 merge是另一个常用的函数,现在速度会更快。Pandas团队希望现在使用基于PyArrow支持的DataFrames的体验会更好。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70033967/viewspace-2984548/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2023-09-19

  • 博文量
    1
  • 访问量
    811