Python 从rpy2数据帧到pandas数据帧的转换不适用于字符串类型的列
如果我尝试使用仅由数字列构成的数据框从pandas转换为R,再转换回pandas,则结果正常,如下所示:Python 从rpy2数据帧到pandas数据帧的转换不适用于字符串类型的列,python,pandas,numpy,type-conversion,rpy2,Python,Pandas,Numpy,Type Conversion,Rpy2,如果我尝试使用仅由数字列构成的数据框从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) 在这种情况下
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中的问题还是我做错了什么?我从冻糕评论(见上文)中得到了这个答案的线索 我在collab中将rpy2的版本更改为3.2.2(最新版本) 在此新版本中,函数
py2ri
和ri2py
分别更改为py2rpy
和rpy2py
在与我的问题类似的代码中使用它们,前后的转换非常完美
我使用的代码如下所示:
!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)
我不重复你的错误。rpy2的哪个版本:
打印(rpy2.\u版本)
?尝试从rpy2.robject导入pandas2ri并初始化pandas2ri.activate()
,然后调用df\u r=pandas2ri.py2ri(df\u py);df_py2=pandas2ri.ri2py(df_r)
我正在Google Colab中使用rpy2版本2.9.5。如果我尝试上面提到的命令,我会得到相同的错误消息:“尚未支持此类型的缓冲区”。