2013-09-26 10 views
7

Niektóre R datasets może być loaded into a Pandas DataFrame or Panel dość łatwo:obciążenia high-dimensional R zbiór danych do Pandy DataFrame

import pandas.rpy.common as com 
infert = com.load_data('infert') 
print(infert.head()) 

To wydaje się działać tak długo, jak wymiar zbiorze R jest < = 3. Wyższe zbiory danych wymiarowych wydrukowania komunikat o błędzie:

wiadomość
In [67]: com.load_data('Titanic') 
Cannot handle dim=4 

błąd ten powstaje w funkcji rpy/common.py_convert_array.

Oczywiście, sensowne jest, że Pandy nie mogą bezpośrednio klepać czterowymiarowej matrycy w element DataFrame lub Panel, ale czy istnieje jakiś sposób na załadowanie zestawów danych, takich jak Titanic, do DataFrame (może z indeksem hierarchicznym)?

+1

'melt' go najpierw w R, a następnie załadować go ...? – joran

+0

@joran: Dziękuję, myślę, że to działa! – unutbu

Odpowiedz

1

Z Pandas version 0.13.0 or newer , pandas.rpy.common.load_data może załadować zestawów danych przestrzennych, takich jak wyższe Titanic:

import pandas.rpy.common as com 
df = com.load_data('Titanic') 
print(df.head()) 

plony

Survived Age  Sex Class value 
0  No Child Male 1st 0.0 
1  No Child Male 2nd 0.0 
2  No Child Male 3rd 35.0 
3  No Child Male Crew 0.0 
4  No Child Female 1st 0.0 
7

Korzystanie @ Jøran bardzo pomocne sugestie, po zainstalowaniu pakietu reshape z

% sudo R 
R> install.packages('reshape') 

udało mi się załadować Titanic zbiór danych do Pandy DataFrame z:

import pandas as pd 
import pandas.rpy.common as com 
import rpy2.robjects as ro 

r = ro.r 
r('library(reshape)') 
df = com.convert_robj(r('melt(Titanic)')) 
print(df.head()) 

które drukowane

Class  Sex Age Survived value 
1 1st Male Child  No  0 
2 2nd Male Child  No  0 
3 3rd Male Child  No  35 
4 Crew Male Child  No  0 
5 1st Female Child  No  0 
+2

Cieszę się, że zadziałało. FYI, ** reshape ** to stara wersja. Może warto zamiast tego użyć ** reshape2 **. – joran