【发布时间】: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