簡體   English   中英

如何讀取大文件為 Pandas dataframe?

[英]How to read a large file as Pandas dataframe?

我想讀取一個大文件(4GB)作為 Pandas dataframe。 Since using Dask directly still consumes maximum CPU, I read the file as a pandas dataframe, then use dask_cudf , and then convert back to a pandas dataframe.

但是,我的代碼仍在 Kaggle 上使用最大 CPU。 GPU 加速器已打開。

import pandas as pd 
from dask import dataframe as dd
from dask_cuda import LocalCUDACluster
from dask.distributed import Client
cluster = LocalCUDACluster()
client = Client(cluster)

df = pd.read_csv("../input/subtype-nt/meth_subtype_normal_tumor.csv", sep="\t", index_col=0)
ddf = dask_cudf.from_cudf(df, npartitions=2)
meth_sub_nt = ddf.infer_objects()

我有類似的問題。 通過一些研究,我開始了解Vaex

您可以在此處此處閱讀有關其性能的信息。

本質上,這是您可以嘗試做的事情:

  1. 使用 Vaex 讀取csv文件並將其轉換為hdf5文件(針對 Vaex 最優化的文件格式)

     vaex_df = vaex.from_csv('../input/subtype-nt/meth_subtype_normal_tumor.csv', convert=True, chunk_size=5_000)
  2. 使用 Vaex 打開hdf5文件。 Vaex 將進行內存映射,因此不會將數據加載到 memory 中。

     vaex_df = vaex.open('../input/subtype-nt/meth_subtype_normal_tumor.csv.hdf5')

現在您可以對 Vaex dataframe 執行操作,就像對 Pandas 進行操作一樣。 它將非常快,您肯定會注意到巨大的性能提升(較低的 CPU 和 memory 使用率)。

您也可以嘗試將csv文件直接讀入 Vaex dataframe 而不將其轉換為hdf5 我在某處讀到 Vaex 處理hdf5文件的速度最快,因此我建議采用上述方法。

vaex_df = vaex.from_csv('../input/subtype-nt/meth_subtype_normal_tumor.csv.hdf5', chunk_size=5_000)

現在您的代碼建議您首先嘗試使用pandas加載數據,然后將其轉換為dask-cuDF dataframe。 這不是最優的(或者甚至可能不可行)。 相反,可以使用dask_cudf.read_csv function(參見 文檔):

from dask_cudf import read_csv

ddf = read_csv('example_output/foo_dask.csv')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM