问题是我有299个.csv文件(每个文件150-200 MB,平均数百万行和12列-组成一年的数据(大约52 GB /年)。我有6年并且想要最后将它们全部串联起来),我想用python将其串联成一个.csv文件。如您所料,尝试以下代码时遇到内存错误(我的机器具有16GB的RAM):import os, gzip, pandas as pd, timerootdir = "/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模型等。我的约束:对于大量数据我还是很陌生,但是我已经完成了部分工作:我知道多处理对我的发展无济于事。这是一项顺序工作,我需要完成每个任务,以便我可以开始下一个任务。主要问题是内存用完。我知道,即使添加了块大小,大熊猫也可以很好地工作。但是,由于数据量巨大,因此内存问题仍然存在。我试图将工作分解为一些小任务,以免耗尽内存,但是无论如何我以后会在连接时使用它。我的问题:仍然可以用我不知道的任何其他方式使用python / pandas来执行此任务,或者无论使用哪种数据库方法,都需要切换?你能建议哪个吗?如果数据库方法是唯一途径,那么当需要执行基于python的操作来训练DL模型时,我会遇到问题吗?我的意思是,如果我需要使用pandas / numpy函数来转换数据,那是否可能,或者由于文件大小而出现问题吗?在此先多谢,对本主题的深入说明,我将不胜感激。
2 回答
眼眸繁星
TA贡献1873条经验 获得超9个赞
在尝试并使用了@mdurant指出的以下代码段后,我学到了很多东西,并更正了关于dask
内存问题的观点。
经验教训:
Dask
在执行第一个预处理任务之后是否可以使用它(如果最终您最终会得到巨大的文件,而熊猫则很难加载/处理它们)。获得“所需”的庞然大物文件后,您可以将其加载到dask.dataframe
对象中,而不会出现任何问题并进行处理。与内存相关: 第一课-提出一个过程,这样您就不必合并所有文件,并且用完了内存;只需处理它们的循环并通过更改dtype,删除列,重采样来减少其内容...第二课-尝试仅将所需的内容存储到内存中,以免耗尽。第三课-如果没有其他课程,请寻找EC2实例,Spark,SQL等大数据工具。
添加回答
举报
0/150
提交
取消