首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不耗尽内存的情况下从sql查询创建一个大型的pandas数据帧?

如何在不耗尽内存的情况下从sql查询创建一个大型的pandas数据帧?
EN

Stack Overflow用户
提问于 2013-08-07 23:50:02
回答 4查看 89.9K关注 0票数 60

我在查询MS SQL Server数据库中超过500万条记录的表时遇到问题。我想选择所有的记录,但是在内存中选择太多数据时,我的代码似乎失败了。

这是可行的:

代码语言:javascript
复制
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

...but这不起作用:

代码语言:javascript
复制
sql = "SELECT TOP 2000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

它返回以下错误:

代码语言:javascript
复制
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error

我在here上读到,从csv文件创建dataframe时也存在类似的问题,解决方法是使用'iterator‘和'chunksize’参数,如下所示:

代码语言:javascript
复制
read_csv('exp4326.csv', iterator=True, chunksize=1000)

对于SQL数据库的查询,有没有类似的解决方案?如果不是,首选的解决方法是什么?我是否应该使用其他方法来读取块中的记录?我读过一些关于在pandas中处理大型数据集的讨论here,但执行SELECT *查询似乎有很多工作要做。当然还有一种更简单的方法。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18107953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档