Python pandas的read_sql函数返回一个生成器对象。

10 浏览
0 Comments

Python pandas的read_sql函数返回一个生成器对象。

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

当我输入这行代码时,我没有看到任何错误

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

但是当我尝试查看

df

时,我得到了这个错误


我搜索了一下这个错误的含义或可能引起它的原因,但没有找到令人满意的答案。

使用chunksize的原因是我有一个包含6000万行的Oracle数据库表,并计划分批下载然后将它们组合在一起,就像这里一样:

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

0
0 Comments

问题的原因是:使用pandas的read_sql_query函数读取数据库时,当指定了chunksize参数时,函数返回的是一个生成器对象,而不是一个DataFrame对象。这导致无法直接将所有的查询结果合并成一个DataFrame对象。

解决方法是:使用for循环迭代生成器对象,将每个chunk(查询结果的一部分)处理后添加到一个列表中。然后,使用pd.concat函数将所有处理后的chunk合并成一个DataFrame对象。

具体的代码示例是:

chunks = pd.read_sql_query(sql_str, engine, chunksize=10)
processed_chunks = []
for chunk in chunks:
    processed_chunk = do_something_with(chunk)
    processed_chunks.append(processed_chunk)
result = pd.concat(processed_chunks)

通过以上步骤,我们可以将所有的查询结果合并成一个DataFrame对象result。

0
0 Comments

Python pandas read_sql方法返回的是一个生成器对象,而不是一个DataFrame对象。有些人可能会误以为这是一个错误,但实际上这只是告诉您df是一个生成器对象。

如果您需要访问生成器对象中的特定数据点,可以使用循环来遍历生成器对象。

0