Cargando archivos .RData en Python

Tengo un montón de archivos de series de tiempo .RData y me gustaría cargarlos directamente en Python sin antes convertirlos a otra extensión (como .csv). ¿Alguna idea sobre la mejor manera de lograr esto?

La gente pregunta este tipo de cosas en la lista de R-help y R-dev y la respuesta habitual es que el código es la documentación para el formato de archivo .RData . Así que cualquier otra implementación en cualquier otro lenguaje es difícil ++ .

Creo que la única forma razonable es instalar RPy2 y usar la función de load de R a partir de eso, convirtiéndolo en objetos de Python apropiados a medida que avanzas. El archivo .RData puede contener objetos estructurados así como tablas simples, así que .RData cuidado.

Linky: http://rpy.sourceforge.net/rpy2/doc-2.4/html/

Quicky:

 >>> import rpy2.robjects as robjects >>> robjects.r['load'](".RData") 

los objetos ahora están cargados en el espacio de trabajo de R.

 >>> robjects.r['y']  [0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317] 

Es un simple escalar, d es un dataframe, puedo subconjuntar para obtener columnas:

 >>> robjects.r['d'][0]  [ 1, 2, 3, ..., 8, 9, 10] >>> robjects.r['d'][1]  [0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136] 

Usuarios de portátiles Jupyter

Si está utilizando la notebook Jupyter, necesita hacer 2 pasos:

Paso 1: vaya a http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2 y descargue la interfaz de Python al lenguaje R (incrustado R) en mi caso rpy2-2.8.6-cp36-cp36m-win_amd64.whl

Coloque este archivo en el mismo directorio de trabajo en el que se encuentra actualmente.

Paso 2: Ve a tu cuaderno Jupyter y escribe los siguientes comandos

 # This is to install rpy2 library in Anaconda !pip install rpy2-2.8.6-cp36-cp36m-win_amd64.whl 

y entonces

 # This is important if you will be using rpy2 import os os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2' 

y entonces

 import rpy2.robjects as robjects from rpy2.robjects import pandas2ri pandas2ri.activate() 

Esto debería permitirte usar las funciones R en python. Ahora tienes que importar el readRDS como sigue

 readRDS = robjects.r['readRDS'] df = readRDS('Data1.rds') df = pandas2ri.ri2py(df) df.head() 

¡Felicidades! Ahora tienes el Dataframe que querías

Sin embargo, le aconsejo que lo guarde en un archivo pickle para su uso posterior en Python como

  df.to_pickle('Data1') 

Así que la próxima vez puedes usarlo simplemente

 df1=pd.read_pickle('Data1') 

Como alternativa para aquellos que prefieren no tener que instalar R para realizar esta tarea (r2py lo requiere), hay un nuevo paquete “pyreadr” que permite leer archivos RData y Rds directamente en python sin dependencias.

Es una envoltura alrededor de la biblioteca librdata C, por lo que es muy rápido.

Puedes instalarlo fácilmente con pip:

 pip install pyreadr 

Como ejemplo harías:

 import pyreadr result = pyreadr.read_r('/path/to/file.RData') # also works for Rds # done! let's see what we got # result is a dictionary where keys are the name of objects and the values python # objects print(result.keys()) # let's check what objects we got df1 = result["df1"] # extract the pandas data frame for object df1 

El repository está aquí: https://github.com/ofajardo/pyreadr

Descargo de responsabilidad: Soy el desarrollador de este paquete.

Hay una biblioteca de terceros llamada rpy , y puede usar esta biblioteca para cargar archivos .RData . Puedes obtener esto a través de un pip install pip instally rpy hará el truco, si no tienes rpy , entonces te sugiero que rpy un vistazo a cómo instalarlo. De lo contrario, puedes simplemente hacer:

 from rpy import * r.load("file name here") 

EDITAR:

Parece que soy un poco de vieja escuela, s rpy2 ahora, así que puedes usar eso.