CSV关键词映射DataFrame时索引计数器重复返回10的问题排查
问题原因
该问题由计数器自增逻辑的位置错误导致:
你当前的计数器自增逻辑被放在了「映射后的新关键词不存在于结果字典」的条件分支中,仅当首次出现某个新关键词时才会触发计数器+1。而你的CSV中第9、10、11行的MAP TO字段值均为wars of religion,触发了逻辑漏洞:
- 处理第9行(索引9)的旧关键词
wars of religion时,新关键词不在字典中,触发新增逻辑,计数器自增为10 - 处理第10行(索引10)的旧关键词
war of religion时,新关键词已存在于字典中,仅执行页码追加操作,未触发计数器自增,计数器仍为10 - 处理第11行(索引11)的旧关键词
confessional warfare时,代码仍读取索引为10的行数据,出现匹配错位,最终触发异常逻辑直接将旧关键词写入结果字典。
修复方案
- 调整计数器位置:将
counter += 1代码移到循环体的最外层,无论新关键词是否已存在于字典,每处理完一行CSV数据就执行一次自增,保证行索引和遍历进度完全对齐。 - 更稳妥的方案是放弃手动维护计数器,直接使用pandas自带的行遍历方法处理CSV数据,从根源避免手动计数的错位问题,参考代码如下:
# 遍历DataFrame的每一行,idx为行索引,row为当前行数据 for idx, row in df.iterrows(): old_keyword = row['WORD'] mapped_keyword = row['MAP TO'] print(f"TRYING TO FIND {old_keyword} :") print(f"POSITION IN DATAFRAME: {idx}") # 以下保留你原有页码提取、结果字典更新的逻辑
- 额外优化建议:更新结果字典时仅和映射后的新关键词绑定,不需要关联计数器逻辑,参考逻辑:
# 调用你原有提取页码的方法,拿到当前旧关键词对应的页码列表 page_nums = get_pdf_page_numbers(old_keyword) if mapped_keyword in index_dict: # 新关键词已存在,追加页码后去重排序 index_dict[mapped_keyword].extend(page_nums) index_dict[mapped_keyword] = sorted(list(set(index_dict[mapped_keyword]))) else: # 新关键词不存在,新增键值对 index_dict[mapped_keyword] = page_nums
内容的提问来源于stack exchange,提问作者OnceUponATime
相关产品推荐
相关产品推荐

