psycopg2的映射结果与RPY2的R中的r
题
使用psycopg2,我以这种形式获得查询的结果:
[(15002325,24,24,24,20,1393,-67333094L,38,4,493.48763257822799,493.633348372593703),(15002339,76,76,20 1394,-67333094L,38,4,493.493464900383,493.633348372593703),(15002483,76,76,20,20,20,20,20,1394,-67333094l,-67333094L,91,91
我正在尝试将此嵌套的元组/列表转换为带有rpy2的R DataFrame:带有名称的九列和四行数据(此嵌套列表中的元素数))
但是我不明白,我正在尝试使用taggedList(进入RPY2容器库),但没有成功。.似乎标记的列表仅按一个列表列出一个列表。
THX寻求帮助!
解决方案
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
请注意,有一个 postgresql的R接口, ,这可能比经过Python和Rpy2更干净。
如果您需要Python,另一种可能性是找出加载PostgreSQL数据所需的R命令,然后使用Python调用它们 ro.r
.
不隶属于 StackOverflow