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 的内存过多的主要内容,如果未能解决你的问题,请参考以下文章