pandas 数据帧从 parquet 读取的速度比从 pickle 文件读取的速度慢

Wal*_*l-E 5 pickle dataframe pandas parquet

根据https://towardsdatascience.com/the-best-format-to-save-pandas-data-414dca023e0d的基准测试 ,该基准使用分类列作为字符串,数字列作为浮点数,从 Pandas 数据帧加载时读取速度应该更快。 parquet 文件比 pickle 文件。

我碰巧在以下用例中始终看到相反的情况,其中我只有 1 列具有固定数量字符的字符串,其中所有字符都可以从一行到下一行变化,以下是这些字符串的示例:

./2010/10/12/2010-10-12T02:38:47.09Z_blah0.fixedword1.fixedword2

其中除“fixedword1”和“fixedword2”之外的所有字符都从一行更改为下一行(这些不同的字符是从 2010 年到 2018 年的日期和时间,增量约为 1 秒(增量不是恒定的)。

我在这个数据框中有大约1.3 亿行

数据框由包含以下字符串的 csv 文件构造而成:

df = pd.read_csv(flist, names=['path_str'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

并保存到 pickle 和 parquet 文件中:

parquet_f = os.path.join(parent_dir, 'df.parquet')
df.to_parquet(parquet_f, engine='pyarrow', compression=None)

pickle_f = os.path.join(parent_dir, 'df.pkl')
df.to_pickle(pickle_f)
Run Code Online (Sandbox Code Playgroud)

为什么我总是得到相反的结果,读取文件的速度比读取 1.3 亿行这些字符串的文件pickle快大约 3 倍?parquet我通过设置相同的行数尝试了上面链接的基准测试,并且parquet仍然始终更快。