pandas2.0来了,有哪些优点?

2023-06-1819:03:03后端程序开发Comments2,071 views字数 1306阅读模式

之前我们所使用pandas库都是1.0的版本,在今年4月23号pandas更新为2.0,试用到现在,无论在速度上还是平时常用方法都有提升,下面是罗列2.0版本的一些优点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

数据类型pyarrow

pyarrow 是为 Python 社区提供的 Arrow 支持库,与 NumPy 和 Pandas 的集成度非常高,从 2.0 版开始,Pandas 专门加入了对 pyarrow 数据类型的支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

使用 pyarrow,可以让 pandas 处理数据的数据操作更快,内存使用效率更高,尤其是在处理超大数据集时,其优势更明显。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

速度

根据官方的介绍我们都知道,使用Arrow主要就是提高了速度,那么我们来做一个简单的测试:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

使用NumPy和PyArrow的读取相同的CSV文件,比较两者的差异。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

pandas2.0来了,有哪些优点?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

缺失值

pandas1.0默认引擎+默认数据后端处理Numpy文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",)

pandas2.0来了,有哪些优点?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

pandas2.0"engine="pyarrow""引擎+数据后端处理pyarrow文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",engine="pyarrow",dtype_backend="pyarrow")

pandas2.0来了,有哪些优点?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

这个改进可以说是神来之笔,如果用之前默认方法空值和数值类型在一列里,会默认把整型转换成小数值,这绝对是个灾难。如果想还原成整数,还要先筛选再用astype进行转换,Arrow 的引入可以完美地解决问题,更契合的内存数据结构省了很多麻烦。目前 Pandas 2.0 可以手动指定类型为 pyarrow。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

举个例子,一份重要的Excel数据表格,我们都会将当前表格复制一份再进行操作,避免不小心改变了原数据结构,而在pandas为了避免上述发生的事情,都会将原数据进行copy。在下面的这段的代码,给subset 设置一个新的值的时候,原始的 df 的值也改变了,这不符合我们的直觉,如果没有意识到这一点, 后面所有关于 df 的计算可能都会有很大的偏差。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

df = pd.DataFrame({"foo": [1, 2, 3, 4], "bar": [4, 5, 6, 7]})subset = df["foo"]subset.iloc[0] = 100print(df)

pandas2.0来了,有哪些优点?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

在打开 copy_on_write 之后,subset 改写数据触发了拷贝,数据修改只影响 subset 本身,df 的数据还是不变。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

pd.options.mode.copy_on_write = Truedf = pd.DataFrame({"foo": [1, 2, 3, 4], "bar": [4, 5, 6, 7]})subset = df["foo"]subset.iloc[0] = 100print(df)

pandas2.0来了,有哪些优点?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

后面再读取csv格式的文件默认就写成带pyarrow版本的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html

data = pd.read_csv(self.path + "/" + self.csv_2, encoding="gbk",engine="pyarrow",dtype_backend="pyarrow")
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/47398.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/47398.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定