0

我对 python 和 pandas 数据框非常陌生,我正在努力思考如何将 python 生成器转换为 pandas 数据框。

我想要做的是使用这个产生生成器的函数将一个大表提取成块:

def fetch_data_into_chunks(cursor, arraysize=10**5):
    while True:
        results = cursor.fetchmany(arraysize)
        if not results:
            break
        for result in results:
            yield result

然后我想将结果附加或连接到熊猫数据框:

for data in fetch_data_into_chunks(cursor):
    df.append(data)

但这不起作用并给我错误消息:

TypeError: cannot concatenate object of type "<class 'pyodbc.Row'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid

谢谢您的帮助!

4

1 回答 1

2

假设你有一个到 sql 数据库的连接,你可以使用 Pandas 的内置read_sql方法并指定一个块大小。这本身就是一个生成器,您可以对其进行迭代以创建单个数据框。

在此示例中,sql是您的 sql 查询,并且conn是与您的数据库的连接。

def fetch_data(sql, chunksize=10**5):
    df = pd.DataFrame()
    reader = pd.read_sql(sql,
                         conn,
                         chunksize=chunksize)
    for chunk in reader:
        df = pd.concat([df, chunk], ignore_index=True)
    return df
于 2018-07-19T10:17:31.390 回答