Отображение результата PSYCOPG2 в DataFrame для R с RPY2
Вопрос
С PSYCOPG2 я получаю результат запроса в этой форме:
(15002325, 24, 20, 1393, -67333094L, 38, 4, 493.48799, 493822799, 4937822799, 493.63348372593703), (15002339, 76, 20, 1393, -67333094л, 91, 3, 499.95845909922201, 499.970048093743), (15002431, 24, 20, 1394, -67333094L, 38, 4, 493.493464900383, 493.63348372593703), (15002483, 76, 20, 1394, -67333094л, 91, 3, 499,959042442434, 499.97304310494502)
Я пытаюсь превратить этот вложенный кортеж / список в R DataFrame с RPY2: с девятью столбцом с именем и четырьмя строками данных (количество элементов в этом вложенном списке)))
Но я не понимаю, как, я пытаюсь с TAGGELELISLIST (в библиотеке контейнеров RPY2), но без успеха .. Кажется, меченый список возьмите один список только по одному списку.
Спасибо за помощью!
Решение
import rpy2.robjects as ro
r=ro.r
data=[(15002325, 24, 20, 1393, -67333094L, 38, 4, 493.48763257822799, 493.63348372593703), (15002339, 76, 20, 1393, -67333094L, 91, 3, 499.95845909922201, 499.970048093743), (15002431, 24, 20, 1394, -67333094L, 38, 4, 493.493464900383, 493.63348372593703), (15002483, 76, 20, 1394, -67333094L, 91, 3, 499.959042442434, 499.97304310494502)]
columns=zip(*data)
columns=[ro.FloatVector(col) for col in columns]
names=['col{i}'.format(i=i) for i in range(9)]
dataf = r['data.frame'](**dict(zip(names,columns)))
print(dataf)
# col8 col6 col7 col4 col5 col2 col3 col0 col1
# 1 493.6335 4 493.4876 -67333094 38 20 1393 15002325 24
# 2 499.9700 3 499.9585 -67333094 91 20 1393 15002339 76
# 3 493.6335 4 493.4935 -67333094 38 20 1394 15002431 24
# 4 499.9730 3 499.9590 -67333094 91 20 1394 15002483 76
Обратите внимание, что есть R интерфейс для PostgreSQL, И это может обеспечить более чистый путь, чем проходить через Python и RPY2.
Если вам нужен Python, другая возможность состоит в том, чтобы выяснить команды R, необходимые для загрузки данных из PostgreSQL, а затем вызовите их в Python, используя ro.r
.