Skip to main content
 首页 » 编程设计

python之使用 RPY2 将 psycopg2 的结果映射到 R 的数据帧中

2025年05月04日8落叶无声

使用 psycopg2,我得到这种形式的查询结果:

[(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)]

我正在尝试使用 RPY2 将这个嵌套元组/列表转换为 R 数据框:九列名称和四行数据(此嵌套列表中的元素数))

但我不明白如何,我正在尝试使用 taggedList(进入 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 interface for postgresql ,这可能会提供比通过 Python 和 rpy2 更简洁的方法。

如果您需要 Python,另一种可能性是找出从 postgresql 加载数据所需的 R 命令,然后使用 ro.r 在 Python 中调用它们。