如何在Python中不修改CSV文件跳过每行首元素
解决CSV首列是字符串时的数值提取问题
你当前的核心问题是逻辑搞反了CSV的结构:你的CSV第一行表头是年份(1998、1999...),每行的首元素是地区名称(America、Asia等),但原代码错误地把每行首元素当成年份去转int,自然会报错;同时你想把每个地区对应的各年份数值存入对应列表,原代码的赋值逻辑也完全不对。
修正思路
- 先读取表头行,提取其中的年份(跳过第一个"Area"字段),转为整数存入
years列表 - 遍历数据行时,先获取地区名称,再将该行后续的所有数值转为浮点数,根据地区名称添加到对应列表中
修正后的代码(对应原有的多个列表)
import csv with open("C:/Users/yuhon/Downloads/sgexports_dataset.csv") as openfile: csvreader = csv.reader(openfile) # 读取表头,提取年份(跳过第一个Area字段) header = next(csvreader) years = [int(year) for year in header[1:]] # 初始化各地区列表 americaExports = [] asiaExports = [] europeExports = [] oceaniaExports = [] africaExports = [] euExports = [] for row in csvreader: area = row[0] # 提取当前地区的所有出口数值,转为float exports = [float(num) for num in row[1:]] # 根据地区名称将数值列表存入对应变量 if area == "America": americaExports = exports elif area == "Asia": asiaExports = exports elif area == "Europe": europeExports = exports elif area == "Oceania": oceaniaExports = exports elif area == "Africa": africaExports = exports elif area == "European Union": euExports = exports
更简洁的实现(用字典映射地区和列表)
如果不想写一堆条件判断,可以用字典来管理地区和对应的数据,扩展性更好:
import csv with open("C:/Users/yuhon/Downloads/sgexports_dataset.csv") as openfile: csvreader = csv.reader(openfile) header = next(csvreader) years = [int(year) for year in header[1:]] # 用字典存储地区和对应出口数据 export_data = {} for row in csvreader: area = row[0] export_data[area] = [float(num) for num in row[1:]] # 如需单独提取各地区数据,直接从字典中取 americaExports = export_data["America"] asiaExports = export_data["Asia"] # 其他地区以此类推
关键说明
- 全程不需要修改原CSV文件,所有数据处理都在内存中完成
- 原代码使用
pop导致循环异常,是因为pop会修改原行列表,但这里根本不需要修改行结构,只需跳过首元素处理后续数值即可
内容的提问来源于stack exchange,提问作者aaa bbb
相关产品推荐
相关产品推荐

