【问题标题】:HOW - to convert a python generator to pandas dataframe如何 - 将 python 生成器转换为 pandas 数据帧
【发布时间】:2018-07-19 09:36:05
【问题描述】:

我对 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

感谢您的帮助!

【问题讨论】:

    标签: pandas generator python-3.7


    【解决方案1】:

    假设你有一个 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
    

    【讨论】:

    • 谢谢!你知道如何使用 asyncio 将其转换为异步的吗? df = pd.concat( [chunk for chunk in pd.read_sql(query, con=CACHE, chunksize=10**5)])
    • 不,我不熟悉,对不起。
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2019-06-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多