2014-01-22 70 views
16

我有一堆.RData時間序列文件,並且希望直接將它們加載到Python中,而無需先將文件轉換爲其他擴展名(如.csv)。有關完成此任務的最佳方法的任何想法?將.RData文件加載到Python

回答

20

人們在R幫助和R-dev列表上提出這樣的問題,通常的答案是代碼是.RData文件格式的文檔。因此任何其他語言的其他實現都是hard ++

我認爲唯一合理的方法是安裝RPy2並使用R的load函數,隨時轉換爲適當的python對象。 .RData文件可以包含結構化對象以及普通表,所以要小心。

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

Quicky:

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

對象現在被加載到將R的工作區。

>>> robjects.r['y'] 
<FloatVector - Python:0x24c6560/R:0xf1f0e0> 
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317] 

這是一個簡單的標量,d是數據幀,我能子集,以獲得列:

>>> robjects.r['d'][0] 
<IntVector - Python:0x24c9248/R:0xbbc6c0> 
[  1,  2,  3, ...,  8,  9,  10] 
>>> robjects.r['d'][1] 
<FloatVector - Python:0x24c93b0/R:0xf1f230> 
[0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136] 
+0

一個有用的註釋添加:通常你會想在Numpy中操作這些對象,所以我會添加以下內容:'從rpy2.robjects import numpy2ri'然後''numpy2ri.ri2numpy(r ['d'])''。然後你可以用「pythonic」方式操作numpy數組。 – jonathanrocher

+0

@jonathanrocher現在看來(numpy 1.11.1)你可以做'np.array(r ['d'])'而且'numpy2ri'裏面沒有'ri2numpy'了。 – daknowles

2

有一個叫rpy第三方庫,你可以使用這個庫加載.RData文件。你可以通過pip得到這個安裝pip instally rpy會做的伎倆,如果你沒有rpy,那麼我建議你看看如何安裝它。否則,你可以簡單的做:

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

編輯:

好像我現在有點老學校裏,S rpy2,所以你可以使用它。如果您正在使用Jupyter筆記本

+0

真棒,謝謝 – Stu

+2

仍然使用'rpy'?這很常見。 –

+0

@Stu如果這對你有幫助,考慮接受[答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

Jupyter筆記本用戶

,你需要做2步:

第1步:去http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2和下載Python接口在我的情況R語言(嵌入式R)我會用rpy2-2.8.6-cp36-cp36m-win_amd64.whl

將這個文件在同一個工作目錄中您目前在

第二步:去你Jupyter筆記本,寫如下命令

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

然後

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

然後

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

這應該允許您在Py​​thon中使用R裏面的函數。現在,你必須導入readRDS如下

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

恭喜!現在你有數據幀你想

不過,我勸你把它在Python中稍後的時間使用鹹菜文件保存爲

df.to_pickle('Data1') 

因此,下一次你可以簡單地通過

df1=pd.read_pickle('Data1') 
使用