猿问

熊猫的记忆问题(了解记忆问题)

问题是我有299个.csv文件(每个文件150-200 MB,平均数百万行和12列-组成一年的数据(大约52 GB /年)。我有6年并且想要最后将它们全部串联起来),我想用python将其串联成一个.csv文件。如您所料,尝试以下代码时遇到内存错误(我的机器具有16GB的RAM):


import os, gzip, pandas as pd, time


rootdir = "/home/eriz/Desktop/2012_try/01"


dataframe_total_list = []


counter = 0 


start = time.time()


for subdir, dirs, files in os.walk(rootdir):

    dirs.sort()


for files_gz in files:


    with gzip.open(os.path.join(subdir, files_gz)) as f:


         df = pd.read_csv(f)

         dataframe_total_list.append(df)

         counter += 1

         print(counter)


total_result = pd.concat(dataframe_total_list)

total_result.to_csv("/home/eriz/Desktop/2012_try/01/01.csv", encoding="utf-8", index=False)

我的目标是:获取一个.csv文件,然后将其用于训练DL模型等。

我的约束:对于大量数据我还是很陌生,但是我已经完成了部分工作:

  1. 我知道多处理对我的发展无济于事。这是一项顺序工作,我需要完成每个任务,以便我可以开始下一个任务。主要问题是内存用完。

  2. 我知道,即使添加了块大小,大熊猫也可以很好地工作。但是,由于数据量巨大,因此内存问题仍然存在。

  3. 我试图将工作分解为一些小任务,以免耗尽内存,但是无论如何我以后会在连接时使用它。

我的问题:

  1. 仍然可以用我不知道的任何其他方式使用python / pandas来执行此任务,或者无论使用哪种数据库方法,都需要切换?你能建议哪个吗?

  2. 如果数据库方法是唯一途径,那么当需要执行基于python的操作来训练DL模型时,我会遇到问题吗?我的意思是,如果我需要使用pandas / numpy函数来转换数据,那是否可能,或者由于文件大小而出现问题吗?

在此先多谢,对本主题的深入说明,我将不胜感激。


呼啦一阵风
浏览 148回答 2
2回答

眼眸繁星

在尝试并使用了@mdurant指出的以下代码段后,我学到了很多东西,并更正了关于dask内存问题的观点。经验教训:Dask在执行第一个预处理任务之后是否可以使用它(如果最终您最终会得到巨大的文件,而熊猫则很难加载/处理它们)。获得“所需”的庞然大物文件后,您可以将其加载到dask.dataframe对象中,而不会出现任何问题并进行处理。与内存相关: 第一课-提出一个过程,这样您就不必合并所有文件,并且用完了内存;只需处理它们的循环并通过更改dtype,删除列,重采样来减少其内容...第二课-尝试仅将所需的内容存储到内存中,以免耗尽。第三课-如果没有其他课程,请寻找EC2实例,Spark,SQL等大数据工具。
随时随地看视频慕课网APP

相关分类

Python
我要回答