You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用.iloc获取奇偶单行报错,调用R sidrar包批量生成CSV失败

问题修正方案

你遇到的报错核心原因是把全局行切片放在了循环内部,导致每次返回全量奇偶行而非当前循环对应的单条字符串,同时代码存在几处拼写和语法遗漏,修正方案如下:

核心修改点

  • 替换循环内的全局切片写法,直接用循环变量i定位当前行:iloc[i, 0]取奇序行字符串作为文件名,iloc[i+1, 0]取偶序行字符串作为URL前缀
  • 修正拼写错误:将table_Size改为table_size,补充导入rpy2的pandas转换器
  • 补全代码末尾缺失的闭合括号
  • 同步R侧文件读取逻辑,将pd.read_csv的分隔符改为\n,避免读取数据错位
  • 适配Python索引从0开始的规则,调整序列起始值为0,避免行错位和索引越界

修正后完整代码

import pandas as pd
import numpy as np
import rpy2.robjects.packages as rp
from rpy2 import robjects as ro
from rpy2.robjects.conversion import localconverter as lc
# 补充导入pandas转换器
import rpy2.robjects.pandas2ri as pr

utils = rp.importr('utils')
utils.chooseCRANmirror(ind=1)
utils.install_packages("sidrar")
sidrar = rp.importr("sidrar")
    
# 同步R侧读取逻辑,分隔符使用\n
table_nameUrl = pd.read_csv("Data.txt", sep="\n", header= None)
table_size = len(table_nameUrl)
# 适配Python索引从0开始的规则,起始值设为0
sequence = np.arange(0, table_size, 2)
for i in sequence:
    # 每次取单条字符串值
    csv_name = table_nameUrl.iloc[i, 0]
    csv_url = table_nameUrl.iloc[i+1, 0]
    last_url = "/n3/all/n6/in%20n3%2028"
    file_name = f"{csv_name}.csv"
    url = f"{csv_url}{last_url}"
    with lc(ro.default_converter + pr.converter):
        file_nameC = ro.conversion.py2rpy(file_name)
        url_c = ro.conversion.py2rpy(url)
    ro.globalenv['fileName'] = file_nameC
    ro.globalenv['url'] = url_c
    ro.r('table= get_sidra(api= url)')
    # 补全缺失的闭合括号
    ro.r('write.csv(table, file= fileName, row.names = F)')

内容的提问来源于stack exchange,提问作者Thiago Santana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:03