Python从CSV文件导入权重使用时提示权重与总体数量不匹配如何修复?
问题修复方案
错误原因
random.choices()要求传入的weights权重列表长度必须和population待选列表的长度完全一致,你的代码存在三个核心问题:- 传入的
population是当前行拆分后的全字段列表list1,但weights只传了单个字符串元素list1[6],二者长度不匹配 - 读文件的循环逻辑错误,每次循环都会覆盖变量,没有积累所有待选的id和对应权重
- 权重值是从csv读取的字符串格式,没有转换为数值类型,无法参与权重计算
- 传入的
修复后的代码
import random # 提前声明列表积累所有id和对应权重 id_list = [] weight_list = [] file = "替换为你的csv文件路径.csv" with open(file, "r") as f: # 如果csv有表头,取消注释下一行跳过首行 # next(f) for line in f: line = line.strip() # 跳过空行 if not line: continue fields = line.split(",") # 收集id id_list.append(fields[0]) # 把第6位的权重转成数值后收集 weight_list.append(float(fields[6])) # 按权重随机选1个id,需要选多个可修改k参数,比如k=3 selected_id = random.choices(id_list, weights=weight_list, k=1)[0] print(selected_id)
额外注意点
- 如果csv存在空行、权重列格式不规范的情况,建议加异常捕获处理
- 如果需要保留原csv每行的其他数据,可以把population换成字典或者自定义对象列表,对应调整权重收集逻辑即可
内容的提问来源于stack exchange,提问作者John35
相关产品推荐
相关产品推荐

