我尝试使用pandas将非常大的csv文件合并在一起,但总是内存不足,有没有更有效的内存方法来实现这一点?

vlju58qv  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(238)

我尝试使用pandas将非常大的csv文件合并在一起,但总是内存不足。有没有更有效的内存方法来实现这一点?
我试过使用Dask Dataframes而不是pandas,但我仍然遇到了同样的问题。

temp_df = dd.merge(gcs_df, dias_fio_df, how='inner', on=['charttime', 'subject_id'])

我得到一个MemoryError:screenshot_of_error

beq87vna

beq87vna1#

你是否尝试单独运行合并?你能在没有内存错误的情况下进行第一次合并吗?你可以尝试将单元格拆分为两个不同的单元格,并在进行第二次合并之前使用del从内存中删除前两个 Dataframe (gcs_e_df和gcs_m_df)。
另一个可能会产生问题的事情是,如果你的表中有重复的['charttime','subject_id']:这将完全耗尽内存,因为您将多次连接每一行,并且 Dataframe 的大小将呈指数级增长

eiee3dmh

eiee3dmh2#

这在pandas中很常见,不仅与CSV相关,而且与所有数据集相关。
当处理非常大的CSV文件(或parquet等)并耗尽内存时,您可以通过以下几种方法来缓解它:
1.就像上面提到的-分块读取CSV文件:您可以使用pandas中read_csv()函数的chunksize参数以较小的块读取CSV文件。这样,您就不会一次将整个文件加载到内存中。
如果有可用的,可以使用Dask.dataframeDask是一个并行计算库,可以处理内存不够用的大型数据集。Dask.dataframe类似于pandas,但它可以处理内存不够用的大型数据集。
使用JupySQL沿着DuckDB,这允许您仅在需要时读取数据,而不是将所有内容加载到内存中。这里是关于如何做到这一点的recent tutorial
利用您的数据库:如果你的数据集太大,内存无法容纳,你可以将它存储在一个数据库中,然后使用SQL连接和操作数据。如果你没有一个数据库,这可能是矫枉过正。
通过基于云的示例扩展您的计算机:您可以使用基于云的解决方案(如Amazon Web Services或Google Cloud Platform)来存储和操作数据。这可能会太多,特别是如果您在本地运行ad-hoc。

相关问题