2017-09-13 3 views
0

Nach dem Einlesen einer .csv-Datei mit Pandas, und dann konvertieren es in eine R-Datenrahmen mit dem Paket Rpy2, ich habe ein Modell mit einigen R-Funktionen (auch über rpy2), und möchte nun die Zusammenfassung des Modells und wandle es in einen Pandas-Datenrahmen um (damit ich es entweder als .csv-Datei speichern oder für andere Zwecke verwenden kann). um es herauszufinden:Wie konvertiert man ein rpy2-Matrix-Objekt in einen Pandas-Datenrahmen?

Ich habe die Anweisungen auf der Pandas Website (https://pandas.pydata.org/pandas-docs/stable/r_interface.html Quelle): gefolgt heraus

import pandas as pd 
from rpy2.robjects import r 
import sys 
import rpy2.robjects.packages as rpackages 
from rpy2.robjects.vectors import StrVector 
from rpy2.robjects import r, pandas2ri 

pandas2ri.activate() 
caret = rpackages.importr('caret') 
broom= rpackages.importr('broom') 

my_data= pd.read_csv("my_data.csv") 
r_dataframe= pandas2ri.py2ri(my_data) 

preprocessing= ["center", "scale"] 
center_scale= StrVector(preprocessing) 

#these are the columns in my data frame that will consist of my predictors in the model 
predictors= ['predictor1','predictor2','predictor3'] 
predictors_vector= StrVector(predictors) 

#this column from the dataframe consists of the outcome of the model 
outcome= ['fluorescence'] 
outcome_vector= StrVector(outcome) 

#this line extracts the columns of the predictors from the dataframe 
columns_predictors= r_dataframe.rx(True, columns_vector) 

#this line extracts the column of the outcome from the dataframe 
column_response= r_dataframe.rx(True, column_response) 

cvCtrl = caret.trainControl(method = "repeatedcv", number= 20, repeats = 100) 

model_R= caret.train(columns_predictors, columns_response, method = "glmStepAIC", preProc = center_scale, trControl = cvCtrl) 

summary_model= base.summary(model_R) 

coefficients= stats.coef(summary_model) 

pd_dataframe = pandas2ri.ri2py(coefficients) 

pd_dataframe.to_csv("coefficents.csv") 

Obwohl dieser Workflow angeblich korrekt ist, hat die Ausgabe CSV-Datei entspricht nicht meine Bedürfnisse , da die Namen der Spalten und Zeilen entfernt wurden. Als ich den Befehl type(pd_dataframe) ausführte, finde ich, dass es ein <type 'numpy.ndarray'> ist. Obwohl die Informationen der Tabelle immer noch vorhanden sind, hat die neue Formatierung die Namen der Spalten und Zeilen entfernt.

Also habe ich den Befehl type(coefficients) ausgeführt und festgestellt, dass es ein war. Da dieses Matrix-Objekt immer noch die Namen meiner Spalten und Zeilen enthielt, habe ich versucht, es in einen R-Objekt-Datenrahmen zu konvertieren, aber meine Bemühungen erwiesen sich als vergeblich. Außerdem weiß ich nicht, warum die Zeile pd_dataframe = pandas2ri.ri2py(coefficients) kein pandas-DataFrame-Objekt ergeben hat oder warum sie nicht die Namen meiner Spalten und Zeilen beibehalten hat.

Kann jemand einen Ansatz empfehlen, damit ich eine Art Pandas DataFrame bekommen kann, der die Namen meiner Spalten und Zeilen beibehält?

UPDATE

Eine neue Methode wurde in den Dokumenten einer etwas älteren Version des Pakets genannt pandas2ri.ri2py_dataframe (Quelle: https://rpy2.readthedocs.io/en/version_2.7.x/changes.html) erwähnt, und ich habe jetzt einen richtigen Datenrahmen anstelle des numpy Array. Allerdings kann ich die Namen der Zeilen und Spalten, die ordnungsgemäß übertragen werden, immer noch nicht abrufen. Irgendwelche Vorschläge?

+0

Das Dokument für die aktuelle Version befindet sich derzeit unter https://rpy2.github.io/doc/v2.9.x/html/index .html – lgautier

+0

@lgautier Ich weiß, aber ich benutze Version 2.8.x, weil, als ich 2.9.x herunterladen und verwenden wollte, meine IDE sagte, dass mein Python 2.7 Skript nicht kompatibel sei und es nur mit Python 3 funktionieren würde. x. –

Antwort

Verwandte Themen