rpy2 / R interface¶
Updating your code to use rpy2 functions¶
在v0.16.0中,pandas.rpy
模块已弃用,用户指向rpy2
本身)。
不要将导入 pandas.rpy.common 作为 com
导入,应该做到激活rpy2中的pandas转换支持:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
在rpy2和pandas之间来回转换数据帧应该在很大程度上自动化(不需要显式转换,它将在大多数rpy2函数中即时完成)。
要显式转换,函数为pandas2ri.py2ri()
和pandas2ri.ri2py()
。所以这些函数可以用来替换pandas中的现有函数:
com.convert_to_r_dataframe(df)
应替换为pandas2ri.py2ri(df)
com.convert_robj(rdf)
应替换为pandas2ri.ri2py(rdf)
注意:这些函数用于最新版本(rpy2 2.5.x),之前称为pandas2ri.pandas2ri()
和pandas2ri.ri2pandas()
。
pandas.rpy中的一些其他功能也可以轻松替换。例如,使用load_data
函数加载R数据,当前方法:
df_iris = com.load_data('iris')
可替换为:
from rpy2.robjects import r
r.data('iris')
df_iris = pandas2ri.ri2py(r[name])
convert_to_r_matrix
函数可以替换为正常的pandas2ri.py2ri
以转换数据帧,随后调用R as.matrix
函数。
警告
并不是rpy2中的所有转换函数都与pandas中的当前方法完全相同。如果您遇到与大熊猫相比的问题或限制,请在问题跟踪器上报告此问题。
另请参见rpy2项目的文档。
R interface with rpy2¶
如果您的计算机安装了R和rpy2(> 2.2)(将留给读者),您将能够利用以下功能。在Windows上,这样做是相当痛苦的,但在类Unix系统上的用户应该很容易。rpy2在时间上演变,目前达到2.3版本,而当前接口是为2.2.x系列设计的。我们建议使用2.2.x比其他系列,除非你准备修复部分代码,但rpy2-2.3.0引入了改进,如更好的R-Python桥内存管理层,因此它可能是一个好主意子弹和提交修补程序的一些小的差异,需要修复。
# if installing for the first time
hg clone http://bitbucket.org/lgautier/rpy2
cd rpy2
hg pull
hg update version_2.2.x
sudo python setup.py install
注意
要通过此接口使用R程序包,您需要自己在R中安装它们。目前它无法为您安装它们。
安装完R和rpy2后,您应该可以轻松导入pandas.rpy.common
。
Transferring R data sets into Python¶
load_data函数检索R数据集并将其转换为适当的pandas对象(很可能是DataFrame):
In [1]: import pandas.rpy.common as com
In [2]: infert = com.load_data('infert')
In [3]: infert.head()
Out[3]:
education age parity induced case spontaneous stratum pooled.stratum
1 0-5yrs 26.0 6.0 1.0 1.0 2.0 1 3.0
2 0-5yrs 42.0 1.0 1.0 1.0 0.0 2 1.0
3 0-5yrs 39.0 6.0 2.0 1.0 0.0 3 4.0
4 0-5yrs 34.0 4.0 2.0 1.0 0.0 4 2.0
5 6-11yrs 35.0 3.0 1.0 1.0 1.0 5 32.0
Converting DataFrames into R objects¶
版本0.8中的新功能。
从pandas 0.8开始,有实验支持将DataFrames转换为等效的R对象(即data.frame):
In [4]: import pandas.rpy.common as com
In [5]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]},
...: index=["one", "two", "three"])
...:
In [6]: r_dataframe = com.convert_to_r_dataframe(df)
In [7]: print(type(r_dataframe))
<class 'rpy2.robjects.vectors.DataFrame'>
In [8]: print(r_dataframe)
A B C
one 1 4 7
two 2 5 8
three 3 6 9
DataFrame的索引存储为data.frame实例的rownames
属性。
您还可以使用convert_to_r_matrix获取Matrix
实例,但是请记住,它只适用于均匀类型的DataFrames(因为R矩阵不包含数据类型的信息):
In [9]: import pandas.rpy.common as com
In [10]: r_matrix = com.convert_to_r_matrix(df)
In [11]: print(type(r_matrix))
<class 'rpy2.robjects.vectors.Matrix'>
In [12]: print(r_matrix)
A B C
one 1 4 7
two 2 5 8
three 3 6 9