Pandas 使用 read_sql_table 的内存过多

Posted

技术标签:

【中文标题】Pandas 使用 read_sql_table 的内存过多【英文标题】:Pandas using too much memory with read_sql_table 【发布时间】:2017-05-06 07:39:30 【问题描述】:

我正在尝试将我的 Postgres 数据库中的表读入 Python。表大约有 800 万行和 17 列,在数据库中的大小为 622MB。

我可以使用 psql 将整个表导出到 csv,然后使用 pd.read_csv() 将其读入。它工作得非常好。 Python 进程只使用了大约 1GB 的内存,一切都很好。

现在,我们需要做的任务需要自动拉取,所以我想我可以直接从数据库中使用 pd.read_sql_table() 读取表。使用以下代码

import sqlalchemy
engine = sqlalchemy.create_engine("postgresql://username:password@hostname:5432/db")
the_frame = pd.read_sql_table(table_name='table_name', con=engine,schema='schemaname') 

这种方法开始使用大量内存。当我使用任务管理器跟踪内存使用情况时,我可以看到 Python 进程的内存使用情况不断攀升,直至达到 16GB 并冻结计算机。

感谢任何关于为什么会发生这种情况的想法。

【问题讨论】:

查看是否有chunksize参数,分块读取dataframe 【参考方案1】:

您需要设置 chunksize 参数,以便 pandas 可以迭代更小的数据块。看到这个帖子:https://***.com/a/31839639/3707607

【讨论】:

有趣。这肯定有效,将问题标记为已回答。我仍然不确定为什么从数据库中引入整个数据帧需要比从 csv 中读取多 10 倍的内存。 注意:即使使用了 chunksize,pandas 仍然可以潜在地从数据库中引入整个巨大的数据集。看到这条评论:***.com/questions/18107953/…

以上是关于Pandas 使用 read_sql_table 的内存过多的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 使用 read_sql_table 的内存过多

Pandas 读取的 sql 整数变为浮点数

pd.read_sql字符类型

pandas读取sql查询和读取sql表的区别

Postgres:当公共模式上存在表时,关系不存在错误

Python - 坐标绘图