Python pandas read_sql 返回生成器对象

Posted

技术标签:

【中文标题】Python pandas read_sql 返回生成器对象【英文标题】:Python pandas read_sql returns generator object 【发布时间】:2015-09-19 02:57:49 【问题描述】:

我正在使用 pyodbc 和 pandas read_sql 从 Oracle 数据库中提取数据。

我输入此行时没有看到任何错误

df = pd.read_sql(sql_str,cnxn,chunksize=10)

但是当我尝试查看时

df

我收到此错误

<generator object _query_iterator at 0x092D40F8>

我对这个错误的含义或可能导致它的原因的搜索没有得到令人满意的答案。

之所以使用chunksize,是因为我有一个6000万行的Oracle db表,打算按位下载,然后放在一起,就像这里: How to create a large pandas dataframe from an sql query without running out of memory?

【问题讨论】:

具体来说,您看到的不是“错误”,它表示df 对象是生成器对象。 【参考方案1】:

我更愿意发表评论,但目前还不能。无论如何,这并不是告诉您df 是生成器对象的错误。

【讨论】:

谢谢。您的意思是该错误没有提供信息吗? 正如其他答案所示,您可以遍历生成器对象以获取特定数据点。【参考方案2】:

正如chunksize 的解释所说,当指定时,它返回一个迭代器,其中chunksize 是每个块中包含的行数。 所以你可以遍历结果并对每个块做一些事情:

for chunk in pd.read_sql_query(sql_str, engine, chunksize=10):
    do_something_with(chunk)

通常您可以处理该块并将其添加到一个列表中,然后在此 for 循环之后将该列表中的所有已处理块连接在一起。

另请参阅有关 sql 查询的文档:http://pandas.pydata.org/pandas-docs/stable/io.html#querying 示例。

【讨论】:

如何将它们全部添加到一个数据框中? 你可以使用pd.concat(list(chunks))

以上是关于Python pandas read_sql 返回生成器对象的主要内容,如果未能解决你的问题,请参考以下文章

pandas read_sql 没有读取所有行

在 pandas 中为 read_sql 指定 dtypes

如何使 pandas.read_sql() 不将所有标题转换为小写

Pandas read_sql 列不正确

使用 pandas.read_sql 和 MSAccess 的特定表名的“sql 执行失败”

pd.read_sql字符类型