2013-02-26 11 views
10

Nigdy wcześniej nie używałam rpy2, ale zastanawiam się, czy mogę go użyć do zapisania obiektu Pythona (panda DataFrame) w pliku czytelnym dla R. Mam problem z przenoszeniem obiektów między tymi środowiskami, głównie dlatego, że używam systemu Windows, a źródłem danych jest plik Excel. Tak, takie, które zawierają komórki z tekstem, w tym spacje z cudzysłowami, znaki nowej linii i wszystkie elementy, których CSV nie może odpowiednio obsłużyć.Czy mogę użyć programu rpy2, aby zapisać ramkę danych pandy do pliku .Rdata?

zwykle polegają na XLConnectJars, ale wydaje się być uszkodzony

Installing package(s) into ‘C:/Program Files/R/library’ 
(as ‘lib’ is unspecified) 
trying URL 'http://cran.csiro.au/bin/windows/contrib/2.15/XLConnectJars_0.2-4.zip' 
Content type 'application/zip' length 16538311 bytes (15.8 Mb) 
opened URL 
downloaded 15.3 Mb 

Warning in install.packages : 
    downloaded length 16011264 != reported length 16538311 

pandy czyta poprawnie, ale trzeba korzystać z informacji w R.

+2

Ostrzeżenie nie jest błędem. Pakiet prawdopodobnie nadal będzie działał (miałem to ostrzeżenie z przerwami bez rzeczywistych problemów) – mnel

+0

@mnel Błąd z błędem: 'pakiet' Znaleziono XLConnectJars '0.2-0, ale == 0.2.4 jest wymagane przez' XLConnect '' – dmvianna

Odpowiedz

7

Można użyć rpy2 to zrobić. Po uzyskaniu danych w panda, musisz przekazać je do R. This link zapewnia eksperymentalny interfejs między Python Pandas i R data.frames. Przykład kodu skopiowane ze strony internetowej:

from pandas import DataFrame 
import pandas.rpy.common as com 

df = DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]}, 
       index=["one", "two", "three"]) 
r_dataframe = com.convert_to_r_dataframe(df) 

print type(r_dataframe) 
<class 'rpy2.robjects.vectors.DataFrame'> 

print r_dataframe 
     A B C 
one 1 4 7 
two 2 5 8 
three 3 6 9 
+0

Więc w jaki sposób zapisałbyś ten plik 'data.frame' do pliku' .RData'? – RoyalTS

+2

Używanie funkcji 'zapisz'. –

1

Oto jak pisać/czytać .RData pliki rpy2 (od przyjętego rozwiązania jest przestarzała i nie pokazuje, jak zaoszczędzić na .RData pliku):

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

# read .RData file as a pandas dataframe 
def load_rdata_file(filename): 
    r_data = robjects.r['get'](robjects.r['load'](filename)) 
    df = pandas2ri.ri2py(r_data) 
    return df 

# write pandas dataframe to an .RData file 
def save_rdata_file(df, filename): 
    r_data = pandas2ri.py2ri(df) 
    robjects.r.assign("my_df", r_data) 
    robjects.r("save(my_df, file='{}')".format(filename)) 
Powiązane problemy