Fre*_*ter 4 python dataframe pandas python-polars
我有一个parquet
文件(~1.5 GB),我想用polars
. 生成的数据帧有 250k 行和 10 列。一栏里有大块的文本。
我刚刚开始使用极坐标,因为我听到了很多关于它的好消息。其中之一是它比 pandas 快得多。
这是我的问题:
数据帧的预处理相当慢,所以我开始与pandas
. 我是否做错了什么,或者这个特定用例的极坐标只是速度较慢?如果是这样:有没有办法加快速度?
这是我的代码polars
import polars as pl
df = (pl.scan_parquet("folder/myfile.parquet")
.filter((pl.col("type")=="Urteil") | (pl.col("type")=="Beschluss"))
.collect()
)
df.head()
Run Code Online (Sandbox Code Playgroud)
整个代码大约需要1 分钟,而仅过滤部分大约需要13 秒。
我的代码在pandas
:
import pandas as pd
df = (pd.read_parquet("folder/myfile.parquet")
.query("type == 'Urteil' | type == 'Beschluss'") )
df.head()
Run Code Online (Sandbox Code Playgroud)
整个代码也大约需要1 分钟,而仅查询部分就需要<1 秒。
数据框的 10 列具有以下类型:
如前所述:“ content
”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。
编辑:删除了原始帖子的尺寸部分,因为比较不是同类的,并且似乎与我的问题无关。
如前所述:“内容”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。
这就是极地动物必须比熊猫做更多工作的地方。Polars 使用arrow
字符串数据的内存格式。当您过滤时,DataFrame
将重新创建所有列的mask
计算结果true
。
这意味着字符串列中的所有文本字节都需要移动。而对于 pandas 来说,它们只需将指针移动到周围的 python 对象,例如几个字节。
如果字符串的值非常大,这只会造成伤害。例如,当您存储整个网页时。您可以通过转换为分类来加快速度。