Как преобразовать все столбцы вида памяти в байтовые столбцы в кадре данных Pandas? - PullRequest
0 голосов
/ 06 сентября 2018

Я получаю большой объем данных из PostgreSQL с помощью:

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

Но Pandas использует адаптер psycopg2 для PostgreSQL, который возвращает memoryview вместо байтов по историческим причинам . Насколько мне известно, нет никакой возможности заставить 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)

Но столбцы не возвращаются.

Так кто-нибудь знает, как я могу иметь эффективный способ преобразования всех memoryview столбцов произвольного кадра данных панд в bytes?

1 Ответ

0 голосов
/ 06 сентября 2018

Итак, очевидно, что когда мы используем просмотр памяти, 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

Это действительно не идеально, и, вероятно, не очень быстро, но, кажется, работает достаточно хорошо.

...