我想使用熊猫进行所有分析,并使用numpy,但使用Rpy2绘制数据。我想用熊猫数据框做所有的分析,然后用rpy2绘制完整的R来绘制这些图。 py2,并使用ipython来绘图。什么是正确的方法来做到这一点?如何在Rpy2中使用熊猫数据框和numpy数组?
几乎所有我尝试的命令都失败了。例如:
- 我想绘制一个熊猫DataFrame的两列之间的分散点
df
。我希望df
的标签在x/y轴上使用,就像使用R数据框一样。有没有办法做到这一点?当我试着使用r.plot
做到这一点,我得到这个杂乱的情节:
In: r.plot(df.a, df.b) # df is pandas DataFrame
产量:
Out: rpy2.rinterface.NULL
导致剧情:
就像你c一看,轴标签被搞乱了,它并不像它应该那样从DataFrame读取轴标签(X轴是a
的列df
,而Y轴是列b
)。
如果我努力使与
r.hist
直方图,它不会在所有的工作,产生了错误:In: r.hist(df.a) Out: ... vectors.pyc in <genexpr>((x,)) 293 if l < 7: 294 s = '[' + \ --> 295 ', '.join((p_str(x, max_width = math.floor(52/l)) for x in self[ : 8])) +\ 296 ']' 297 else: vectors.pyc in p_str(x, max_width) 287 res = x 288 else: --> 289 res = "%s..." % (str(x[ : (max_width - 3)])) 290 return res 291 TypeError: slice indices must be integers or None or have an __index__ method
,并导致该地块:
任何想法错误是什么意思?再一次,这些轴都乱成一团,乱七八糟的乱七八糟的数据。
编辑:仅当使用ipython时才会发生此错误。当我从脚本运行命令时,它仍会产生有问题的情节,但至少运行时没有错误。从ipython中调用这些命令肯定有问题。
我也试图大熊猫数据帧
df
转换的R数据框所推荐的下面的海报,但这个错误也失败:com.convert_to_r_dataframe(mydf) # mydf is a pandas DataFrame ----> 1 com.convert_to_r_dataframe(mydf) in convert_to_r_dataframe(df, strings_as_factors) 275 # FIXME: This doesn't handle MultiIndex 276 --> 277 for column in df: 278 value = df[column] 279 value_type = value.dtype.type TypeError: iteration over non-sequence
我怎样才能得到这些在Pandas DataFrame上工作的基本绘图功能(从Pandas DataFrame的标签中读取绘图标签),并且还可以在Pandas DF到R DF之间进行转换,以便正常工作?
EDIT2:下面是一个csv文件“test”的完整示例。TXT”(http://pastebin.ca/2311928)和我的代码来回答@戴尔的评论:
import rpy2
from rpy2.robjects import r
import rpy2.robjects.numpy2ri
import pandas.rpy.common as com
from rpy2.robjects.packages import importr
from rpy2.robjects.lib import grid
from rpy2.robjects.lib import ggplot2
rpy2.robjects.numpy2ri.activate()
from numpy import *
import scipy
# load up pandas df
import pandas
data = pandas.read_table("./test.txt")
# plotting a column fails
print "data.c2: ", data.c2
r.plot(data.c2)
# Conversion and then plotting also fails
r_df = com.convert_to_r_dataframe(data)
r.plot(r_df)
调用绘制的列‘data.c2’失败,即使data.c2是大熊猫DF的一列,因此对于所有意图和目的应该是一个numpy的数组。我用的是activate()
电话,所以我想它会处理这列作为numpy的阵列和绘制。
第二次调用转换后绘制数据框data
的R数据框也为什么会这样?如果我从R加载test.txt
作为数据框,我能够plot()
它,并且由于我的数据帧已从熊猫转换为R,它看起来就像它也应该在这里工作。
当我在ipython中尝试rmagic
时,由于某种原因它不会启动绘图窗口,尽管它没有错误。即如果我这样做:
In [12]: X = np.array([0,1,2,3,4])
In [13]: Y = np.array([3,5,4,6,7])
In [14]: import rpy2
In [15]: from rpy2.robjects import r
In [16]: import rpy2.robjects.numpy2ri
In [17]: import pandas.rpy.common as com
In [18]: from rpy2.robjects.packages import importr
In [19]: from rpy2.robjects.lib import grid
In [20]: from rpy2.robjects.lib import ggplot2
In [21]: rpy2.robjects.numpy2ri.activate()
In [22]: from numpy import *
In [23]: import scipy
In [24]: r.assign("x", X)
Out[24]:
<Array - Python:0x592ad88/R:0x6110850>
[ 0, 1, 2, 3, 4]
In [25]: r.assign("y", Y)
<Array - Python:0x592f5f0/R:0x61109b8>
[ 3, 5, 4, 6, 7]
In [27]: %R plot(x,y)
没有错误,但没有图窗口。无论如何,我想坚持使用rpy2,如果可能的话,不要依赖rmagic
。
谢谢。
可以导出CSV导入和背部或使用RPY – locojay
@locojay:如何使用RPY与大熊猫数据帧? – user248237dfsf
看看http://rpy.sourceforge.net/rpy/doc/rpy_html/DataFrame-class.html它使用std python ds ...采用同样的方法,使用pandas df – locojay