如何在Python中获取CSV奇偶行?R脚本迁移至Python报错求助
问题原因
报错的核心是pandas的索引逻辑和R存在差异:
- 你使用
sep=";"读取无分号分隔的单内容行文件,得到的是只有1列的DataFrame,列索引默认从0开始,你写[[1]]是尝试查找列名为1的列,自然触发不存在的报错 - R中
df[[列号]][行号]的取值逻辑,对应pandas按位置取值的语法是df.iloc[行号, 列号],你既搞反了行列的顺序,也没有使用pandas专门的位置索引方法iloc
修复后可运行代码
import pandas as pd import numpy as np # 读取文件,单列表默认列索引为0 table_NameUrl = pd.read_csv("Data.txt", sep=";", header=None) # 提前提取唯一的内容列,简化后续调用 content_col = table_NameUrl.iloc[:, 0] table_Size = len(content_col) # Python索引从0开始,表名对应文件第1/3/5行,对应索引0/2/4,步长设为2 sequence = np.arange(0, table_Size, 2) # 可选异常处理:如果总数据行数是奇数,说明最后一个表名没有匹配的URL,提前提示 if table_Size % 2 != 0: print(f"警告:数据最后一行「{content_col.iloc[-1]}」无匹配URL,已自动跳过") sequence = sequence[:-1] for i in sequence: tableName = content_col.iloc[i] tableUrl = content_col.iloc[i+1] print(f"Table name: {tableName}") print(f"URL: {tableUrl}") fileName = f"{tableName}.csv" ro.globalenv['fileName'] = fileName last_url = "/n3/all/n6/in%20n3%2028" url = f"{tableUrl}{last_url}" ro.globalenv['url'] = url ro.r('table= get_sidra(api= url)') ro.r('write.csv(table, file= fileName, row.names = F)')
内容的提问来源于stack exchange,提问作者Thiago Santana
相关产品推荐
相关产品推荐

