проблема преобразования python pandas DataFrame в R dataframe для использования с rpy2


У меня возникли проблемы с преобразованием pandas DataFrame в Python в объект R, для дальнейшего использования в R с использованием rpy2.

Новый релиз pandas 0.8.0 (выпущен несколько недель назад) имеет функцию преобразования фреймов данных pandas в фреймы данных R. Проблема заключается в преобразовании первого столбца фрейма данных my pandas, который состоит из объектов Python datetime (последовательно, во временном ряду). Преобразование в кадр данных R возвращает StrVector дат и времен, а не вектор R объекты типа datetime, которые, как я полагаю, называются объектами POSIXct.

Я знаю команду для преобразования строки типа, возвращаемого в POSIXct, с помощью команды " as.POSIXct ('yyyy-mm-dd hh: mm: ss')". К сожалению, я не смог выяснить, как преобразовать все эти строки в StrVector в POSIXct, используя python и rpy2. Даты должны быть в формате POSIXct, который будет использоваться с библиотекой TTR в R. Ниже приведен соответствующий код python:

import pandas
from pandas import *
import pandas.rpy.common as com
import rpy2.robjects as robjects
r = robjects.r
r.library('TTR')        #library contains the function ADX, to be used later

dataframe = read_csv('file_name', parse_dates = [0], names  = ['Date','Col1','Col2','Col3']     #command makes 1st column into datetime.datetime object
r_dataframe = com.convert_to_r_dataframe(dataframe)

ADX = r['ADX']          #creating a name for an R function in python
adx = ADX(r_dataframe)    #will not work because the dates in r_dataframe are in a StrVector

Далее я не делаю поверьте, что StrVector можно перебирать, чтобы преобразовать каждый объект в объект POSIXct индивидуально, из-за определения StrVector. Может быть, есть способ привести StrVector к общему?

Любая помощь/понимание этого вопроса высоко ценится. Я начинающий программист и работаю над этим уже пару часов безрезультатно.

Спасибо!

3 7

3 ответа:

Причина сбоя вызова ADX заключается в том, что он ожидает xts или матричный объект с 3 столбцами: High, Low, Close. Ваш объект содержит 4 столбца. Опустите столбец даты перед передачей r_dataframe в ADX, и все должно работать. Затем можно добавить столбец datetime обратно в вывод ADX.

Или, если вы можете установить атрибут row.names ваших данных R.обрамление к значениям столбца Date и затем удаление столбца Date, Вы можете преобразовать ваши данные R.кадр к объекту xts по вызов as.xts(r.data.frame). Затем вы можете передать это в ADX и преобразовать результат обратно в фрейм данных pandas.

Dalejung на GitHub недавно проделал довольно большую работу по созданию более плотного интерфейса pandas-xts с rpy2, вы можете связаться с ним или присоединиться к списку рассылки PyData

Это не ответ на то, что вы хотите. Но как насчет использования библиотеки Пайпер?

Это просто "труба" между python и R. таким образом, не редко возникает проблема что-то о преобразовании. https://pypi.python.org/pypi/piper