Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从rpy2数据帧到pandas数据帧的转换不适用于字符串类型的列_Python_Pandas_Numpy_Type Conversion_Rpy2 - Fatal编程技术网

Python 从rpy2数据帧到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) 在这种情况下

如果我尝试使用仅由数字列构成的数据框从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中的问题还是我做错了什么?

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

我在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。如果我尝试上面提到的命令,我会得到相同的错误消息:“尚未支持此类型的缓冲区”。