【问题标题】:Read a large csv as a Pandas DataFrame faster更快地将大型 csv 作为 Pandas DataFrame 读取
【发布时间】:2019-11-12 23:58:57
【问题描述】:

我有一个 csv,我正在将它读入 Pandas DataFrame,但它需要大约 35 分钟才能读完。 csv 大约为 120 GB。我发现了一个名为 cudf 的模块,它允许 GPU 数据帧,但它仅适用于 LinuxWindows 有类似的吗?

chunk_list = []
combined_array = pd.DataFrame()
for chunk in tqdm(pd.read_csv('\\large_array.csv', header = None, 
        low_memory = False, error_bad_lines = False, chunksize = 10000)):
    print(' --- Complete')
    chunk_list.append(chunk)
array = pd.concat(chunk_list)
print(array)

【问题讨论】:

  • 您应该考虑另一种序列化格式,csv 并不是真正为性能而设计的。您的数据的性质是什么?
  • 正如@juanpa.arrivillaga 提到的,您应该将日期保存在.hd5 文件中。然后将其加载到数据框中会更快。
  • 我的数据由 10 的数千个 1 线阵列组成。
  • 我一直在尝试另存为 .h5,但代码一直告诉我没有名为 tables 的模块,即使我 pip 安装了它。
  • @RicardoZaragoza 这是什么意思? 1 线阵列? CSV 是 text,数组到底是什么意思?此外,如果您尝试使用 hd5,请显示失败的代码。您是否尝试过使用pandas.DataFrame.to_hdf

标签: python windows pandas dataframe cudf


【解决方案1】:

如果你真的想把pandas api读成dataframe,你也可以看看dask-dataframe

对于阅读 csvs ,这将使您的 io 任务跨多个内核和节点并行化。这可能会通过跨节点扩展来减轻内存压力,就像120 GB csv 一样,您也可能会受到内存限制。

另一个不错的选择可能是使用arrow

【讨论】:

    【解决方案2】:

    你有 GPU 吗?如果是,请查看BlazingSQL,Python 包中的 GPU SQL 引擎。

    在本文中,描述Querying a Terabyte with BlazingSQL。并且 BlazingSQL 支持从 CSV 读取。

    在您将 GPU 数据帧转换为 Pandas 数据帧之后

    # from cuDF DataFrame to pandas DataFrame
    df = gdf.to_pandas()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2013-06-04
      • 2018-05-06
      • 2020-01-23
      • 2015-07-31
      • 2018-07-24
      • 2023-02-04
      相关资源
      最近更新 更多