北极熊与熊猫:体型和速度的差异

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 列具有以下类型:

  • i64
  • 斯特
  • 结构[7]
  • str(对于所有剩余的)

如前所述:“ content”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。

编辑:删除了原始帖子的尺寸部分,因为比较不是同类的,并且似乎与我的问题无关。

rit*_*e46 5

如前所述:“内容”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。

这就是极地动物必须比熊猫做更多工作的地方。Polars 使用arrow字符串数据的内存格式。当您过滤时,DataFrame将重新创建所有列的mask计算结果true

这意味着字符串列中的所有文本字节都需要移动。而对于 pandas 来说,它们只需将指针移动到周围的 python 对象,例如几个字节。

如果字符串的值非常大,这只会造成伤害。例如,当您存储整个网页时。您可以通过转换为分类来加快速度。