在python中读取20gb的csv文件

时间:2019-10-11 16:50:45

标签: python-3.x

我正在尝试从远程路径读取python中的20 gb文件。下面的代码以块的形式读取文件,但是如果由于任何原因丢失了与远程路径的连接,我必须重新启动整个读取过程。有没有一种方法可以使我从上一个读取的行继续,并继续追加到我要创建的列表中。这是我的代码:

from tqdm import tqdm
chunksize=100000

df_list = [] # list to hold the batch dataframe

for df_chunk in tqdm(pd.read_csv(pathtofile, chunksize=chunksize, engine='python')):
    df_list.append(df_chunk)

train_df = pd.concat(df_list)

1 个答案:

答案 0 :(得分:1)

您有超过20GB的RAM吗?因为您正在将整个文件读入RAM,并将其表示为Python对象。 df_list.append(df_chunk)是元凶。

您需要做的是:

  • 按小段阅读(您已经读过);
  • 逐段处理;
  • 处理后丢弃旧件。除非您像现在在df_list中那样保留对已用块的引用,否则Python的垃圾回收将为您完成此任务。

请注意,您可以始终将中间/摘要数据保留在RAM中。只是不要一直将整个 input 保留在RAM中。

或获得64GB / 128GB RAM,以您更快的速度为准。有时候,仅仅将更多的资源投入到一个问题中会更快。