我怎么把R数据框导入Pandas?

2024-04-24 10:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用R off and on作为Python的“后端”,因此有时需要将R中的数据帧导入Python;但是我不知道如何将R data.frame作为PandasDataFrame导入。在

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

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

然后使用rmagic

^{pr2}$

我明白了

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

我不知道这是什么,当然不是

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

这是我所期待的。在

文件中的数据只是用来传输文件的

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

然后用Python阅读

pd.read_csv("TEST.csv")

尽管这种方法也会产生一个额外的列:“Unnamed:0”。在

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


Tags: 文件csv数据testfalsetruedataframe
2条回答

这个怎么样(see pandas 0.13.1 documentation):

%load_ext rmagic
%R rdf = data.frame(a=c(2, 3, 5), b=c("aa", "bb", "cc"), c=c(TRUE, FALSE, TRUE))

import pandas.rpy.common as com

print com.load_data('rdf')
   a   b      c
1  2  aa   True
2  3  bb  False
3  5  cc   True

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

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

b列被编码(就像factor()R)中被编码,c列从boolean转换为intaint转换为float'<f8',实际上我发现这是意外的)

第二,我认为pandas.rpy.common是从R:http://pandas.pydata.org/pandas-docs/stable/r_interface.html获取数据的最方便的方法(它可能太短了,所以我在这里再加一个例子):

^{pr2}$

最后,Unnamed: 0列是索引列。您可以通过向index_col=0提供index_col=0来避免它

相关问题 更多 >