如何将R数据帧导入Pandas?

oro*_*ome 4 python import r dataframe pandas

我正在使用R off和on作为Python的"后端",因此需要偶尔将R中的数据帧导入Python; 但我无法弄清楚如何将R导入data.frame为熊猫DataFrame.

例如,如果我在R中创建一个数据帧

rdf = data.frame(a=c(2, 3, 5), b=c("aa", "bb", "cc"), c=c(TRUE, FALSE, TRUE))
Run Code Online (Sandbox Code Playgroud)

然后使用rmagicwith 将其拉入Python

%Rpull -d rdf
Run Code Online (Sandbox Code Playgroud)

我明白了

array([(2.0, 1, 1), (3.0, 2, 0), (5.0, 3, 1)], 
      dtype=[('a', '<f8'), ('b', '<i4'), ('c', '<i4')])
Run Code Online (Sandbox Code Playgroud)

我不知道这是什么,而且肯定不是

pd.DataFrame({'a': [2, 3, 5], 'b': ['aa', 'bb', 'cc'], 'c': [True, False, True]})
Run Code Online (Sandbox Code Playgroud)

我期待的.

接近为我工作的唯一事情就是使用文件通过写入R来传输数据帧

write.csv(data.frame(a=c(2, 3, 5), b=c("aa", "bb", "cc"), c=c(TRUE, FALSE, TRUE)), file="TEST.csv")
Run Code Online (Sandbox Code Playgroud)

然后用Python阅读

pd.read_csv("TEST.csv")
Run Code Online (Sandbox Code Playgroud)

虽然这种方法甚至会产生一个额外的列:"未命名:0".

将R数据帧导入Python作为Pandas数据帧的习惯用法是什么?

CT *_*Zhu 6

第一:array([(2.0, 1, 1), (3.0, 2, 0), (5.0, 3, 1)], dtype=[('a', '<f8'), ('b', '<i4'), ('c', '<i4')]).这是一种numpy结构化的array.http://docs.scipy.org/doc/numpy/user/basics.rec.html/.您可以使用以下命令轻松将其转换为pandasDF pd.DataFrame:

In [65]:

from numpy import *
print pd.DataFrame(array([(2.0, 1, 1), (3.0, 2, 0), (5.0, 3, 1)], dtype=[('a', '<f8'), ('b', '<i4'), ('c', '<i4')]))
   a  b  c
0  2  1  1
1  3  2  0
2  5  3  1
Run Code Online (Sandbox Code Playgroud)

b列被编码(如同factor()'ed in R),c列被转换booleanint.a被转换intfloat('<f8'实际上我发现意外)

2,我认为pandas.rpy.common是从R以下网站获取数据最方便的方法:http://pandas.pydata.org/pandas-docs/stable/r_interface.html(这可能太简短了,所以我将在这里添加另一个例子):

In [71]:

import pandas.rpy.common as com
DF=pd.DataFrame({'val':[1,1,1,2,2,3,3]})
r_DF = com.convert_to_r_dataframe(DF)
print pd.DataFrame(com.convert_robj(r_DF))
   val
0    1
1    1
2    1
3    2
4    2
5    3
6    3
Run Code Online (Sandbox Code Playgroud)

最后,该Unnamed: 0列是索引列.你可以通过提供index_col=0来避免它pd.read_csv()