risultato della mappatura di psycopg2 in dataframe per R con RPY2
Domanda
Con psycopg2, ottengo risultato della query in questa forma:
[(15002325, 24, 20, 1393, -67333094L, 38, 4, 493,48763257822799, 493,63348372593703), (15.002.339, 76, 20, 1393, -67333094L, 91, 3, 499,95845909922201, 499,970048093743), (15.002.431, 24, 20, 1394, -67333094L, 38, 4, 493,493464900383, 493,63348372593703), (15.002.483, 76, 20, 1394, -67333094L, 91, 3, 499,959042442434, 499,97304310494502)]
Sto cercando di convertire questo nidificato tuple / lista in R dataframe con RPY2: con nove colonna con nome, e quattro riga di dati (numero di elemento di questa lista annidata))
Ma io non capisco come, sto cercando con taggedList (in libreria contenitore RPY2), ma senza successo .. Sembra elenco tag prendere una lista da una sola lista.
Thx aiuto!
Soluzione
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
Si noti che esiste un R interfaccia per PostgreSQL , e questo può fornire un modo più pulito che passare attraverso Python e rpy2.
Se avete bisogno di Python, un'altra possibilità è quello di capire i comandi R necessari per caricare i dati da PostgreSQL, e poi li chiamano in Python utilizzando ro.r
.