Как я могу импортировать фрейм данных из R, сохраненный как RData, в панд?

4

Я пытаюсь импортировать фрейм данных из R, сохраненного как RData, в фреймворк pandas. Как я могу это сделать? Я безуспешно пытался использовать rpy2 следующим образом:

import pandas as pd
from rpy2.robjects import r
from rpy2.robjects import pandas2ri
pandas2ri.activate()

# I use iris for convenience but I could have done r.load('my_data.RData')
print(r.data('iris'))
print(r['iris'].head())
print(type(r.data('iris')))

print(pandas2ri.ri2py_dataframe(r.data('iris')))
print(pandas2ri.ri2py(r.data('iris')))
print(pd.DataFrame(r.data('iris')))

выходы:

[1] "iris"

   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
1           5.1          3.5           1.4          0.2  setosa
2           4.9          3.0           1.4          0.2  setosa
3           4.7          3.2           1.3          0.2  setosa
4           4.6          3.1           1.5          0.2  setosa
5           5.0          3.6           1.4          0.2  setosa
<class 'rpy2.robjects.vectors.StrVector'>
   0  1  2  3
0  i  r  i  s
['iris']

Я использую pandas 0.20.1 + python 3.6 x64 + Windows 7.

  • 0
    Может быть, можно использовать rpy2 чтобы открыть Rdata и сохранить каждый объект как csv ?
  • 0
    В чем ошибка или нежелательные результаты? Вы можете показывать это, но не объяснять. Обратите внимание на r.data() != .RData . Первая - это функция, которая извлекает встроенные наборы данных R, такие как iris, mtcars и т. Д., А другая - двоичный тип файла.
Показать ещё 3 комментария
Теги:
pandas
dataframe
rpy2

1 ответ

2
Лучший ответ

Обобщенное преобразование кадров данных оказывается дорогостоящей операцией, так как копирование требуется для некоторых типов столбцов. Локальное правило преобразования может быть лучше:

from rpy2.robjects import pandas2ri
from rpy2.robjects import default_converter
from rpy2.robjects.conversion import localconverter

print(r.data('iris'))
with localconverter(default_converter + pandas2ri.converter) as cv:
    pd_iris = r('iris')
# this is a pandas DataFrame
pd_iris

В противном случае для этой цели "работает только" (Linux, глава по умолчанию для ветки rpy2):

import pandas as pd
from rpy2.robjects import r
from rpy2.robjects import pandas2ri
pandas2ri.activate()

pd_iris = r('iris')
pd_iris

Если это не для вас, может возникнуть проблема с rpy2 в Windows (но еще одна - rpy2 не поддерживается полностью в Windows).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню