如何 - 将 python 生成器转换为 pandas 数据帧

HOW - to convert a python generator to pandas dataframe

我是 python 和 pandas 数据帧的新手,我正在努力思考如何将 python 生成器转换为 pandas 数据帧。

我想做的是用这个函数将一个大的 table 提取成块,生成一个生成器:

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

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

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

感谢您的帮助!

假设您连接到 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