【问题标题】:Conversion from rpy2 dataframe to pandas dataframe not working for columns of string type从 rpy2 数据帧到 pandas 数据帧的转换不适用于字符串类型的列
【发布时间】:2020-03-16 21:05:27
【问题描述】:

如果我尝试使用仅由数字列组成的数据框从 pandas 转换为 R 并返回到 pandas,则一切正常,如下所示:

import pandas as pd
df_py = pd.DataFrame({'col1':[1,2,3,4,5],
                      'col2':[1.0,2.0,3.0,4.0,5.0]})

from rpy2.robjects.pandas2ri import py2ri
df_r = py2ri(df_py)
ri2py(df_r)

在这种情况下,结果是:

  col1  col2
0   1   1.0
1   2   2.0
2   3   3.0
3   4   4.0
4   5   5.0

现在,如果我包含字符串类型的第三列,则会出现错误。往下看:

import pandas as pd
df_py = pd.DataFrame({'col1':[1,2,3,4,5],
                      'col2':[1.0,2.0,3.0,4.0,5.0],
                      'col3':['a','b','c','d','e']})

from rpy2.robjects.pandas2ri import py2ri
df_r = py2ri(df_py)
ri2py(df_r)

错误是:

/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """
---> 85     return array(a, dtype, copy=False, order=order)
     86 
     87 

ValueError: Buffer for this type not yet supported.

这是 rpy2 中的问题还是我做错了什么?

【问题讨论】:

  • 我不会重现您的错误。什么版本的 rpy2:print(rpy2.__version__)?尝试from rpy2.robjects import pandas2ri 并初始化pandas2ri.activate(),然后调用df_r = pandas2ri.py2ri(df_py); df_py2 = pandas2ri.ri2py(df_r)
  • 我在 Google Colab 中使用 rpy2 版本 2.9.5。如果我尝试上述命令,我会收到相同的错误消息:“尚不支持此类型的缓冲区”。

标签: python pandas numpy type-conversion rpy2


【解决方案1】:

我从 Parfait 评论中得到了这个答案的线索(见上文)。

我把collab中rpy2的版本改成了3.2.2(最新版)。

在这个新版本中,py2riri2py 函数分别更改为 py2rpyrpy2py

在与我的问题中提供的代码类似的代码中使用它们,来回转换非常完美。

我使用的代码如下所示:

!pip install rpy2==3.2.2
import rpy2
import pandas as pd
df_py = pd.DataFrame({'col1':[1,2,3,4,5],
                      'col2':[1.0,2.0,3.0,4.0,5.0],
                      'col3':['a','b','c','d','e']})

from rpy2.robjects.pandas2ri import py2rpy, rpy2py
rpy2.robjects.pandas2ri.activate()

df_r = py2rpy(df_py)    
rpy2py(df_r)

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 2023-01-21
    • 1970-01-01
    • 2014-06-07
    • 2011-09-11
    • 1970-01-01
    • 2011-12-10
    • 2020-06-10
    相关资源
    最近更新 更多