我正在使用以下方法从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
?
答案 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
这确实不是理想的,并且可能不是很快,但是它似乎运行得很好。