如何将所有memoryview列转换为Pandas数据帧中的字节列?

问题描述 投票:1回答:1

我正在从PostgreSQL中检索大量数据:

it = pandas.read_sql_table(table, DB_CONN, chunksize=1000)

但是Pandas使用psycopg2适配器用于PostgreSQL,returns a memoryview instead of bytes for historical reasons。据我所知,没有选择让psycopg2返回bytes而不是memoryview,所以我坚持这个。

现在,我给Pandas数据帧的库是用C语言编写的,不接受memoryview并且只能处理bytes,所以我需要一种方法将所有memoryview列转换为bytes

我试着这样做:

dataframe[column_name].astype(bytes)

但它对memoryview - > bytes不起作用,显然:

*** ValueError: setting an array element with a sequence

我也尝试过这样的事情:

dataframe.select_dtypes(include=[memoryview]).apply(bytes)

但它不会返回任何列。

那么有谁知道如何有效地将任意pandas数据帧的所有memoryview列转换为bytes

python pandas psycopg2
1个回答
0
投票

所以,显然当我们使用memoryview时,Pandas无法识别该数据类型并只存储“对象”,所以我最终做了这样的事情:

def dataframe_memoryview_to_bytes(dataframe):
    for col in dataframe.columns:
        if type(dataframe[col][0]) == memoryview:
            dataframe[col] = dataframe[col].apply(bytes)
    return dataframe

它真的不理想,可能不是很快,但似乎运行得相当好。

© www.soinside.com 2019 - 2024. All rights reserved.