我正在从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
?
所以,显然当我们使用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
它真的不理想,可能不是很快,但似乎运行得相当好。