Pandas2.0来了,有什么优势?
我之前使用的pandas库是1.0版本。今年4月23日,pandas更新至2.0。经过测试,速度和常用方法都有所提高。以下是 2.0 版本的一些优点。 。 pyarrow 数据类型
pyarrow 是一个可供 Python 社区使用的 Arrow 支持库。它与 NumPy 和 Pandas 高度集成。从2.0版本开始,Pandas专门增加了对pyarrow数据类型的支持。
使用pyarrow可以让pandas在内存使用上更快、更高效地处理数据。尤其是在处理非常大的数据集时,好处更加明显。 速度
根据官方的介绍,我们都知道使用Arrow主要是提高速度,所以我们来做一个简单的测试:
使用NumPy和PyArrow读取同一个CSV文件,并比较两者。区别。
缺失值
pandas1.0标准引擎+Numpy标准数据后端处理
data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",)
pandas2.0"engine="pyarrow""pyarrow引擎+数据后端处理
data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",engine="pyarrow",dtype_backend="pyarrow")
这个改进堪称神来之笔。如果使用之前的默认方法将空值和数字类型放入字段中,整数类型将默认转换为小数值,这将是一场灾难。如果想转换为整数,需要先过滤,然后使用astype转换。 Arrow的引入可以完美解决问题,内存数据结构更适合省去很多问题。现在Pandas 2.0可以手动定义类型为pyarrow。
比如对于一个重要的Excel数据表,我们会复制当前的表,然后对其进行操作,以避免不小心改变了原来的数据结构。在pandas中,为了防止上述情况发生,原始数据会创建一个副本。在下面的代码中,当为子集设置新值时,原始 df 值也会更改。这不符合我们的直觉。如果您没有意识到这一点,则 df 的所有后续计算都可能会出错。偏差很大。
df = pd.DataFrame({"foo": [1, 2, 3, 4], "bar": [4, 5, 6, 7]})
subset = df["foo"]
subset.iloc[0] = 100
print(df)
启用copy_on_write后,子集会覆盖数据并触发复制。数据修改只影响子集本身,df数据保持不变。
pd.options.mode.copy_on_write = True
df = pd.DataFrame({"foo": [1, 2, 3, 4], "bar": [4, 5, 6, 7]})
subset = df["foo"]
subset.iloc[0] = 100
print(df)
如果后面看csv格式文件,默认是pyarrow版本写的:
data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",engine="pyarrow",dtype_backend="pyarrow")
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。