我需要用python(进入pandas数据帧)读取一个csv文件,在R中工作并返回到python。然后,为了将pandas数据帧传递给R数据帧,我使用rpy2,并且正常工作(代码如下)。
from pandas import read_csv, DataFrame
import pandas.rpy.common as com
import rpy2.robjects as robjects
r = robjects.r
r.library("fitdistrplus")
df = read_csv('./datos.csv')
r_df = com.convert_to_r_dataframe(df)
print(type(r_df))
这个输出是:
<class 'rpy2.robjects.vectors.FloatVector'>
但是,我试着在R中做一个合适的事情:
fit2 = r.fitdist(r_df, "weibull")
但我有这个错误:
RRuntimeError: Error in (function (data, distr, method = c("mle", "mme", "qme", "mge"), :
data must be a numeric vector of length greater than 1
我有第二个问题:
1_我做错了什么?
2_这是将python数据帧传递给R的最有效方法吗?因为,我看到这个导入:from rpy2.robjects.packages import importr
这是我读到的数据:https://mega.co.nz/#!P8MEDSzQ!iQyxt73a5pRvJNOxWeSEaFlsVS7_A1sZCAXkUFBLJa0
我用Ipython 2.1谢谢!
你有两个问题:
首先,您正在尝试使用您真正需要向量的数据框。 (如果你尝试使用R qazxsw poi for qazxsw poi,你也会收到错误。)
其次,pandas提供的pandas < - > rpy2支持是错误的,导致你的(推测)数字pandas数据帧转换为字符串/字符R数据帧:
data.frame
这个不好!以下代码修复了这些错误:
fitdist()
我没有尝试过您的数据,但这样的事情应该可行。
In [27]: r.sapply(r_df, r["class"])
Out[27]:
<StrVector - Python:0x1097757a0 / R:0x7fa41c6b0b68>
[str, str, str, str]