繁体   English   中英

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

[英]How to convert all the memoryview columns to bytes columns in a Pandas dataframe?

我正在使用以下方法从PostgreSQL检索大量数据:

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

但是Pandas使用PostgreSQL的psycopg2适配器, 由于历史原因 ,该适配器返回memoryview而不是字节 据我所知,没有选择使psycopg2返回bytes而不是memoryview ,因此我对此感到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)

但是它不返回任何列。

那么,有谁知道我如何拥有一种有效的方法来将任意熊猫数据帧的所有 memoryview列转换为bytes

因此,显然,当我们使用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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM