首页 > 大数据 > 数据分析 > 进步神速,Pandas 2.1来了!
本文将介绍Pandas 2.1中的新功能,探讨关于这个新版本中最有趣的事情。
Pandas 2.1于2023年8月30日发布。跟随本文一起看看这个版本引入了哪些新内容,以及它如何帮助用户改进Pandas的工作负载。它包含了一系列改进和一组新的弃用功能。
Pandas 2.1在Pandas 2.0中引入的PyArrow集成基础上进行了大量改进。本文主要关注了对新功能的支持,这些新功能有望在Pandas 3.0中成为默认功能。接下来将深入了解这对用户意味着什么,本文将详细介绍最重要的改进。
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对象列完全相同。
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/ ,如需转载,请注明出处,否则将追究法律责任。