سؤال

مع PsyCopg2 ، أحصل على نتيجة الاستعلام في هذا النموذج:

(15002325 ، 24 ، 20 ، 1393 ، -67333094l ، 38 ، 4 ، 493.48763257822799 ، 493.63348372593703) ، (15002339 ، 76 ، 20 ، 1393 ، -673333333319931990 ، 499.999 ، 499.999 ، 499.9999 ، 4999 ، 4999 ، 1394 ، -67333094l ، 38 ، 4 ، 493.493464900383 ، 493.63348372593703) ، (15002483 ، 76 ، 20 ، 1394 ، -67333094L ، 91 ، 3 ، 499.9590424434 ، 499.9730430430430430430430430430430430430430430430430430430430430430

أحاول تحويل هذا tuple/list المتداخلة إلى r dataframe مع rpy2: مع تسعة عمود مع الاسم ، وأربعة صفات من البيانات (عدد العناصر في هذه القائمة المتداخلة))

لكنني لا أفهم كيف ، أحاول مع 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 واجهة لـ PostgreSQL, ، وهذا قد يوفر طريقة أنظف من المرور عبر بيثون و RPY2.

إذا كنت بحاجة إلى Python ، فإن الاحتمال الآخر هو معرفة أوامر R اللازمة لتحميل البيانات من PostgreSQL ، ثم اتصل بها في Python باستخدام ro.r.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top