关于机器学习:Pandas-20-简单介绍和速度评测

Pandas是机器学习中最罕用的一个库了,咱们基本上每天都会应用它。而pandas应用了一个“NumPy”作为后端,这个咱们也都是晓得的,然而最近 Pandas 2.0 的RC版曾经最近公布了。这个版本次要包含bug修复、性能改良和减少Apache Arrow后端。当波及到应用DF时,Arrow比Numpy提供了更多的劣势。

PyArrow能够无效地解决内存中的数据结构。它能够提供一种标准化的形式来示意简单的数据结构,特地是在大数据环境中的数据结构,并且使不同应用程序和零碎之间的数据交换更容易。

在本文中,咱们将做一个简略的介绍和评测,为什么pandas抉择Arrow作为后端,以及如何在pandas 2.0中开始应用Arrow(它尽管不是默认选项)。

Pandas < 2.0和Pandas 2.0有什么不同呢?Pandas 2.0,不仅反对NumPy作为后端,还反对PyArrow。

倡议新开启一个新虚拟环境作为测试,首先装置

 pip install pandas==2.0.0rc0
 pip install pyarrow

而后能够查看版本:

 import pandas as pd
 print(pd.__version__)

Arrow后端

因为不是默认,所以咱们在应用Arrow时,还要显式的指定:

 >>> pd.Series([5, 6, 7, 8], dtype='int64[pyarrow]')
 
 0    5
 1    6
 2    7
 3    8
 
 dtype: int64[pyarrow]

能够看到,当初dtype参数曾经是Arrow了。数据类型也变为了int64[pyarrow],而不是咱们在应用Numpy时的int64。

咱们还能够默认设置Arrow

 import pandas as pd
 pd.options.mode.dtype_backend = 'pyarrow'

这是RC版本,在将来中还很有可能发生变化,比方想应用PyArrow读取CSV,则必须应用上面的代码。

 import pandas as pd
 
 pd.options.mode.dtype_backend = 'pyarrow'
 pd.read_csv("file_name.csv", engine='pyarrow', use_nullable_dtypes=True)

速度比照

依据官网的介绍咱们都晓得,应用Arrow次要就是进步了速度,那么咱们来做一个简略的测试:

应用NumPy和PyArrow的读取雷同的CSV文件,比拟两者的差别。

 %%time
 # Pandas + Numpy
 df_with_numpy = pd.read_csv("randomDF.csv", sep=";")
 
 %%time
 # Pandas + PyArrow
 df_with_pyarrow = pd.read_csv("randomDF.csv", sep=";", engine='pyarrow', use_nullable_dtypes=True)
 

通过执行这几行代码,咱们将看到PyArrow只须要NumPy大概10%的工夫!

咱们再看看其余的测试,比方读取parquet 文件,求和、均匀等:

以上测试后果来自这里:https://datapythonista.me/blog/pandas-20-and-the-arrow-revolu…

能够看到Arrow总是更快。并且在解决字符串的状况下,差别更大,这也很好了解,因为NumPy实际上并不是为解决字符串而设计的(尽管它能够反对字符串)。

Pandas 2.0的一些长处

1、速度

这个应该不用多说了,借助Arrow的劣势,下面看到曾经快了很多

2、缺失值

pandas示意缺失值的办法是将数字转换为浮点数,并应用NaN作为缺失值。

 >>> pd.Series([5, 6, 7, None])
 
 0    5
 1    6
 2    7
 3    NaN
 
 dtype: float64

这并不是最好的解决方案,因为NaN也是带有类型的,比方Int的NaN和float64的NaN在某些方面还是不一样的。而Arrow能够解决缺失的值,让咱们看看同样的例子,但当初应用Arrow反对的类型。

 pd.Series([5, 6, 7, None], dtype='int64[pyarrow]')
 
 0    5
 1    6
 2    7
 3    <NA>
 
 dtype: int64[pyarrow]

3、互操作性

就像CSV文件能够用pandas读取或在Excel中关上一样,Arrow也能够通过R、Spark和Polars等不同程序拜访。

这样做的益处是,在这些程序之间共享数据是简略、疾速和高效的内存。

4、Copy-on-Write

这是一种内存优化技术,用于进步解决大型数据集时的性能并缩小内存应用。

工作原理大抵如下:你复制pandas对象时,如DataFrame或Series,不是立刻创立数据的新正本,pandas将创立对原始数据的援用,并推延创立新正本,直到你以某种形式批改数据。

这意味着如果有雷同数据的多个正本,它们都能够援用雷同的内存,直到对其中一个进行更改。这种形式能够显著缩小内存应用并进步性能,因为不须要对数据进行不必要的复制。

5、更好的索引、更快的拜访和计算

索引当初能够是NumPy数字类型,Pandas 2.0容许索引保留为任何NumPy数字类型的dtype,包含int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32,和float64。在2.0以前只反对int64、uint64和float64类型。

这样的话也能够节俭内存空间进步计算效率。

总结

尽管Pandas 2.0的正式版还没有公布,在pandas 2.0中退出Arrow后端标记着该库的一个重大提高。通过Arrow实现提供了更快、更高效的内存操作,pandas当初能够更好地解决简单而宽泛的数据集。

正式版还没有公布,所以本文的内容也可能与公布的正式版有所出入。咱们这里也只是做了一个简略的评测,期待正式版公布当前咱们再做更具体的比照和介绍。

https://avoid.overfit.cn/post/dd0d9e9417634625be08d9faa9411644

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据