是时候告别 pd.read_csv() 和 pd.to_csv()

是时候告别 pd.read_csv() 和 pd.to_csv()

It’s Time to Say GoodBye to pd.read_csv() and pd.to_csv()
Discussing another major caveat of Pandas
Avi Chawla Published in Towards Data Science May 27, 2022

Pandas 到 CSV 的输入输出操作是序列化的,这使得它们极其低效且耗时。当我在这里看到足够的并行化范围时,我感到很沮丧,但不幸的是,Pandas 还没有提供此功能。尽管我从一开始就不赞成使用 Pandas 创建 CSV(请阅读下面的文章了解原因),但我知道在某些情况下,人们别无选择,只能使用 CSV。
因此,在这篇文章中,我们将探讨Dask和DataTable,这是数据科学家最流行的两个类似 Pandas 的库。我们将根据 Pandas、Dask 和 Datatable 在以下参数上的表现对它们进行排名:

  1. 读取 CSV 并获取 PANDAS DATAFRAME 所需的时间
    如果我们通过 Dask 和 DataTable 读取 CSV,它们将分别生成 Dask DataFrame 和 DataTable DataFrame,而不是 Pandas DataFrame。假设我们想坚持传统的 Pandas 语法和函数(由于熟悉),我们必须首先将它们转换为 Pandas DataFrame,如下所示。
    描述 Pandas DataFrame 到 Dask 和 DataTable DataFrame 转换的代码片段(图片由作者提供)

2.将 PANDAS DATAFRAME 存储到 CSV 所需的时间

目标是从给定的 Pandas DataFrame 生成 CSV 文件。对于 Pandas,我们已经知道df.to_csv()方法。但是,要从 Dask 和 DataTable 创建 CSV,我们首先需要将给定的 Pandas DataFrame 转换为各自的 DataFrame,然后将它们存储在 CSV 中。因此,我们还将在此分析中考虑此 DataFrame 转换所需的时间。
使用 Pandas、Dask 和 DataTable 将 DataFrame 保存到 CSV 的代码片段(图片由作者提供)

实验装置:

  1. 出于实验目的,我在 Python 中生成了一个随机数据集,其中包含可变行和 30 列 — 包含字符串、浮点和整数数据类型。
  2. 我将下面描述的每个实验重复五次,以减少随机性并从观察到的结果中得出公正的结论。我在下一节中报告的数字是五个实验的平均值。
  3. Python环境和库:
  • Python 3.9.12
  • 熊猫1.4.
  • 数据表1.0.0
  • 达克 2022.02.1

实验 1:读取 CSV 所需的时间

下图描述了 Pandas、Dask 和 DataTable 读取 CSV 文件并生成 Pandas DataFrame 所花费的时间(以秒为单位)。CSV 的行数范围从 10 万到 500 万。

折线图描绘了 Pandas、DataTable 和 Dask 读取 CSV 所需的时间(图片由作者提供)

  1. 实验结果表明,当行数少于一百万时,Dask 和 Pandas 从 CSV 生成 Pandas DataFrame 所需的时间大致相同。
  2. 然而,当我们超过一百万行时,Dask 的性能就会恶化,生成 Pandas DataFrame 所需的时间比 Pandas 本身要多得多。
  3. 在这两种情况下,Datatable 在 Pandas 中生成 DataFrame 所需的时间最短,可提供高达 4 到 5 倍的加速 - 使其成为迄今为止最好的选择。

实验 2:保存到 CSV 所需的时间

下图描述了 Pandas、Dask 和 DataTable 从给定的 Pandas DataFrame 生成 CSV 文件所花费的时间(以秒为单位)。行数范围从 100k 到 500 万。
折线图描绘了 Pandas、DataTable 和 Dask 将 DataFrame 存储为 CSV 所需的时间(图片由作者提供)

  1. 在所有情况下,将 Pandas DataFrame 存储到 CSV 时,Dask 的表现都比 Pandas 差。
  2. 与实验 1 类似,DataTable 表现最好——相对于 Pandas,保存过程提高了近8 倍。

结束语

老实说,我不太喜欢 CSV。如果您仔细阅读了我之前的文章(我在上面链接或您可以在此处阅读)和您现在正在阅读的文章,您可能也会与我产生共鸣。自从我发现了与 CSV 相关的众多问题以来,我已尽可能停止使用它们。

总而言之,我想说,除非您需要在 Excel 等非 Python 环境之外查看 DataFrame,否则您根本不需要 CSV。首选 Parquet、Feather 或 Pickle 等格式来存储 DataFrame。不过,如果您没有其他选择,至少可以利用 DataTable 而不是 Pandas 来优化您的输入和输出操作。


Written by Avi Chawla
10.7K Followers
·
Writer for
Towards Data Science

👉 Get a Free Data Science PDF (250+ pages) with 200+ tips by subscribing to my daily newsletter today: https://bit.ly/DailyDS.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值