【问题标题】:Module 'rpy2.robjects.pandas2ri' has no attribute 'ri2py'模块“rpy2.robjects.pandas2ri”没有属性“ri2py”
【发布时间】:2019-09-23 05:21:46
【问题描述】:

我正在尝试将 R-dataframe 转换为 Python Pandas DataFrame。 我使用以下代码:

from rpy2.robjects import pandas2ri
pandas2ri.activate()
r_dataframe = r_function(my_dataframe['Numbers'])
print(r_dataframe)
python_dataframe = pandas2ri.ri2py(r_dataframe)

以上代码在 Jupyter Notebook (Anaconda) 中运行良好。但是,如果我通过终端通过my_program.py 文件运行此代码,则会出现错误:

:~$ python3 my_program.py
Traceback (most recent call last):
  File "my_program.py", line 223, in <module>
    python_dataframe = pandas2ri.ri2py(r_dataframe)
AttributeError: module 'rpy2.robjects.pandas2ri' has no attribute 'ri2py'

代码行:print(r_dataframe) 在终端中显示正确的结果。

如果我尝试在 Jupyter Notebook 中使用代码 print(dir(pandas2ri)),我会得到 ('ri2py'):

['DataFrame', 'FactorVector', 'FloatSexpVector', 'INTSXP', 'ISOdatetime', 'IntSexpVector', 'IntVector', 'ListSexpVector', 'ListVector', 'OrderedDict', 'POSIXct', 'PandasDataFrame', 'PandasIndex', 'PandasSeries', 'SexpVector', 'StrSexpVector', 'StrVector', 'Vector', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'activate', 'as_vector', 'conversion', 'converter', 'datetime', 'deactivate', 'dt_O_type', 'dt_datetime64ns_type', 'get_timezone', 'numpy', 'numpy2ri', 'original_converter', 'os', 'pandas', 'py2ri', 'py2ri_categoryseries', 'py2ri_pandasdataframe', 'py2ri_pandasindex', 'py2ri_pandasseries', 'py2ro', 'pytz', 'recarray', 'ri2py', 'ri2py_dataframe', 'ri2py_floatvector', 'ri2py_intvector', 'ri2py_listvector', 'ri2py_vector', 'ri2ro', 'rinterface', 'ro', 'warnings']

如果我尝试在终端中使用相同的代码 print(dir(pandas2ri)),我会得到 ('rpy2py'):

['DataFrame', 'FactorVector', 'FloatSexpVector', 'ISOdatetime', 'IntSexpVector', 'IntVector', 'ListSexpVector', 'OrderedDict', 'POSIXct', 'PandasDataFrame', 'PandasIndex', 'PandasSeries', 'Sexp', 'SexpVector', 'StrSexpVector', 'StrVector', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'activate', 'as_vector', 'conversion', 'converter', 'datetime', 'deactivate', 'default_timezone', 'dt_O_type', 'get_timezone', 'is_datetime64_any_dtype', 'numpy', 'numpy2ri', 'original_converter', 'pandas', 'py2rpy', 'py2rpy_categoryseries', 'py2rpy_pandasdataframe', 'py2rpy_pandasindex', 'py2rpy_pandasseries', 'pytz', 'ri2py_vector', 'rinterface', 'rpy2py', 'rpy2py_dataframe', 'rpy2py_floatvector', 'rpy2py_intvector', 'rpy2py_listvector', 'tzlocal', 'warnings']

原来开发人员已经更改了函数的名称。

【问题讨论】:

  • 在 Jupyter 中检查 Python 版本,然后在命令行中检查。很可能,两者不同,包括对应的 rpy2 模块。

标签: r python-3.x pandas dataframe rpy2


【解决方案1】:

您使用的文档/代码可能与您安装的版本不同。

如果使用最新版本,请考虑查看相关文档:

https://rpy2.github.io/doc/v3.0.x/html/generated_rst/pandas.html

【讨论】:

  • 该文档还声明了r_from_pd_df = ro.conversion.py2rpy(pd_df)。也许有些行错误地没有更新?
  • “阅读文档”不是一个有用的响应。问题似乎写得很好。
  • 一个详细的问题值得更好的答案。 Mayne 在最新版本中编写了等效函数
猜你喜欢
  • 2014-07-17
  • 2021-04-09
  • 1970-01-01
  • 2020-06-04
  • 2018-07-04
  • 2021-12-24
  • 2015-05-08
  • 2020-10-17
  • 2020-10-03
相关资源
最近更新 更多