#python #r #pandas #dataframe #rpy2
#python #r #pandas #фрейм данных #rpy2
Вопрос:
У меня есть файл RDa, который я создал в R. Я хочу прочитать этот файл на python как фрейм данных pandas. У меня есть следующий код, чтобы сделать то же самое:
import rpy2.robjects as robjects
import numpy as np
from rpy2.robjects import pandas2ri
pandas2ri.activate()
# load your file
robjects.r['load']('Data.RDa')
matrix = robjects.r['data']
matrix
Я получаю следующие результаты:
R object with classes: ('data.frame',) mapped to:
<DataFrame - Python:0x0CF46F58 / R:0x0ED0F200>
[Float..., Float..., Float..., ..., Float..., Float..., Float...]
area: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0CF56A80 / R:0x0F281898>
[NA_real_, NA_real_, NA_real_, ..., NA_real_, NA_real_, NA_real_]
i: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0CF68E68 / R:0x0F2B9520>
[NA_real_, NA_real_, NA_real_, ..., NA_real_, NA_real_, NA_real_]
s: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0CF68940 / R:0x0F380008>
[NA_real_, NA_real_, NA_real_, ..., NA_real_, NA_real_, NA_real_]
...
upslope_area: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0D03FDA0 / R:0x0FE87C90>
[NA_real_, NA_real_, NA_real_, ..., 292.256494, NA_real_, NA_real_]
i: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0D03FC88 / R:0x0FEBF918>
[331347.500000, 331352.500000, 331357.500000, ..., 332187.500000, 332192.500000, 332197.500000]
s: <class 'rpy2.robjects.vectors.FloatVector'>
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x0D03FE68 / R:0x0FEF75A0>
[4554812.500000, 4554812.500000, 4554812.500000, ..., 4553982.500000, 4553982.500000, 4553982.500000]
Как мне преобразовать это во фрейм данных pandas?
Ответ №1:
Это выглядит как пропущенный вызов текущего преобразования при извлечении из пути поиска первого объекта R с символом ‘data’ (короче говоря, при выполнении robjects.r["data"]
). Откройте проблему на rpy2 tracker, если ее еще нет, или поднимите шум в комментариях к уже открытой проблеме, если она не решена или предполагается, что она решена преждевременно.
Явный вызов правил преобразования, ограниченных блоком кода, должен упростить обходной путь и, возможно, поможет вам обеспечить хорошую производительность. Механизм преобразования обеспечивает удобство, но часто за счет производительности, поскольку копия фрейма данных создается каждый раз, когда происходит преобразование в любом направлении.
Вот как это будет выглядеть:
from rpy2.robjects import default_converter
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter
# use the default conversion rules to which the pandas conversion
# is added
with localconverter(default_converter pandas2ri.converter) as cv:
dataf = robjects.r["data"]
Это в документе:http://rpy2.readthedocs.io/en/version_2.8.x/robjects_convert.html#local-conversion-rules