如何将Pandas数据框中的所有memoryview列转换为bytes列?

时间:2018-09-06 09:57:36

标签: python pandas psycopg2

我正在使用以下方法从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)

但是它不返回任何列。

那么,有谁知道我如何拥有一种有效的方式,将任意熊猫数据框的{strong>所有列全部转换为memoryview

1 个答案:

答案 0 :(得分: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

这确实不是理想的,并且可能不是很快,但是它似乎运行得很好。