繁体   English   中英

Python 脚本中的 RPY2 错误! (未为类型为“的对象定义转换‘py2rpy’<class 'pandas.core.frame.dataframe'> ')</class>

[英]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 包sidrapyDadosAbertosBrasil ,因为我需要使用来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM