Pandas是机器学习中最常用的库之一,我们基本上每天都用它。而pandas使用了一个“NumPy”作为后端,这个大家都知道,不过最近Pandas2.0的RC版本最近发布了。此版本主要包括错误修复、性能改进和添加ApacheArrow后端。在使用DF时,Arrow比Numpy有很多优势。PyArrow可以有效地处理内存中的数据结构。它可以提供一种标准化的方式来表示复杂的数据结构,尤其是在大数据环境中,并使不同应用程序和系统之间的数据交换更加容易。在本文中,我们将简要介绍和回顾,为什么pandas选择Arrow作为后端,以及如何在pandas2.0中开始使用Arrow(虽然它不是默认选项)。Pandas<2.0和Pandas2.0有什么区别?Pandas2.0不仅支持NumPy作为后端,还支持PyArrow。建议新开一个虚拟环境作为测试,先安装pipinstallpandas==2.0.0rc0pipinstallpyarrow然后查看版本:importpandasaspdprint(pd.__version__)Arrowbackend不是默认的,所以我们正在使用Arrow,但也明确指定:>>>pd.Series([5,6,7,8],dtype='int64[pyarrow]')05162738dtype:int64[pyarrow]可以看到,dtype参数现在是Arrow。数据类型也变为int64[pyarrow]而不是我们使用Numpy时的int64。我们也可以默认设置Arrowimportpandasaspdpd.options.mode.dtype_backend='pyarrow'。这是RC版本,将来可能会更改。例如,如果要使用PyArrow读取CSV,则必须使用以下代码。importpandasaspdpd.options.mode.dtype_backend='pyarrow'pd.read_csv("file_name.csv",engine='pyarrow',use_nullable_dtypes=True)速度对比根据官方介绍,我们都知道使用Arrow是主要是为了提高速度,我们来做个简单的测试:使用NumPy和PyArrow读取同一个CSV文件,比较两者的区别。%%time#Pandas+Numpydf_with_numpy=pd.read_csv("randomDF.csv",sep=";")%%time#Pandas+PyArrowdf_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实际上并不是为处理字符串而设计的(尽管它可以支持字符串)。Pandas2.0的一些优点1.速度不用说了,有了Arrow的优势,如上所见快多了2.缺失值pandas表示缺失值的方法是将数字转为浮点数数字并使用NaN作为缺失值。>>>pd.Series([5,6,7,None])0516273NaNdtype:float64这不是最好的方案,因为NaN也有类型,比如Int的NaN和Int的NaNfloat64在某些方面仍然不同。虽然Arrow可以处理缺失值,但让我们看一下同一个示例,但现在使用Arrow支持的类型。pd.Series([5,6,7,None],dtype='int64[pyarrow]')0516273
