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)
然后使用rmagic
with 将其拉入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数据帧的习惯用法是什么?
第一: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/.您可以使用以下命令轻松将其转换为pandas
DF 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
列被转换boolean
为int
.a
被转换int
为float
('<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()
归档时间: |
|
查看次数: |
1472 次 |
最近记录: |