![](/img/trans.png)
[英]Rpy2 Error in Django - Conversion 'py2rpy' not defined for objects of type '<class 'str'>
[英]RPY2 error in Python script! (Conversion 'py2rpy' not defined for objects of type '<class 'pandas.core.frame.DataFrame'>')
这是我当前的 Python 代码:
import pandas as pd
import numpy as np
import rpy2.robjects.packages as rp
from rpy2 import robjects as ro
utils = rp.importr('utils')
utils.chooseCRANmirror(ind=1)
utils.install_packages("sidrar")
sidrar = rp.importr("sidrar")
table_NameUrl = pd.read_csv("Data.txt", sep=";", header= None)
table_Size = len(table_NameUrl)
sequence = np.arange(1, table_Size, 2)
for i in sequence:
csvName = table_NameUrl.iloc[::2]
csvUrl = table_NameUrl.iloc[1::2]
last_url = "/n3/all/n6/in%20n3%2028"
fileName = (tableName + ".csv")
url = (csvUrl + last_url)
ro.globalenv['fileName'] = fileName
ro.globalenv['url'] = url
ro.r('table= get_sidra(api= url)')
ro.r('write.csv(table, file= fileName, row.names = F)
CSV 的简短版本(逐行):
帕努 2.1.1、2.1.5
/t/2093/p/2000,2010/v/93/c86/2776,2777,2778,2779,2780,2781/c2/0,4,5/c1/1,2/
帕努 5.1.1、5.1.2、5.1.3、5.1.4、5.1.5、5.1.6、5.1.7、5.1.9、5.1.10
/t/1612/p/2013,2014,2015,2016,2017/v/109,216,214/c81/2688,2691,2692,2694,2696,2708,2702,2715,2703/
帕努 5.1.8
/t/839/p/2013,2014,2015,2016,2017/v/109,216,214/c81/114254/
我在 Python 中使用 rpy2 来获取 R 的sidrar
package。
我没有使用原生 Python 包sidrapy
或DadosAbertosBrasil
,因为我需要使用来自Data.txt
的 Sidra API 的 URL 自动生成大量 CSV。 所以, sidrar
是最好的选择。
但是,当我尝试在fileName
中使用新的 CSV 名称并在 url 中使用新的 CSV 名称url
时,会出现此错误:
Conversion 'py2rpy' not defined for objects of type '<class 'pandas.core.frame.DataFrame'>'
PS: last_url
是 url 的补充,以获得完整的 Sidra API 表,所以这就是我需要连接字符串的原因。
解决方案:我在我的 Python 代码中添加了下面这个 function,错误消失了。
from rpy2.robjects.conversion import localconverter as lc
with lc(ro.default_converter + pr.converter):
fileName_c = ro.conversion.py2rpy(fileName)
url_c = ro.conversion.py2rpy(url)
ro.globalenv['fileName'] = fileName_c
ro.globalenv['url'] = url_c
这修复了错误。 它似乎在 pandas dataframe 上调用 R function 我们必须首先从 rpy2 导入 pandas2ri object。
from rpy2.robjects import pandas2ri
pandas2ri.activate()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.