Pandas数据框中字符串切片与列表推导式报错问题求助
问题解决:提取Code列第三个字符并映射大洲名称
报错原因
你遇到的IndexError: string index out of range,不是列表遍历范围的问题,而是数据框中存在部分Code字符串长度小于3的记录——虽然首尾的Code长度足够,但中间有短字符串,访问索引2时就会触发越界错误。
解决方案
直接用pandas的矢量化操作处理,无需转成列表,更高效且能处理异常情况:
- 排查无效Code(可选但推荐)
先找出所有长度不足3的Code记录,确认数据问题:
invalid_codes = df[df["Code"].str.len() < 3] print(invalid_codes)
- 提取大洲编码并映射名称
一步完成提取第三个字符、映射大洲名称,同时处理长度不足的情况:
# 定义编码与大洲的映射关系 continent_mapping = { "1": "欧洲", "2": "非洲", "3": "美洲", "4": "亚洲", "5": "大洋洲" } # 生成Continent列 df["Continent"] = df["Code"].apply( lambda x: continent_mapping.get(x[2], None) if len(x) >= 3 else None )
原有代码问题说明
你原来的列表推导式[codelist[x][2] for x in range(0,len(codelist)-1)]存在两个问题:
- 遍历范围
range(0, len(codelist)-1)会漏掉最后一个元素(range是左闭右开规则) - 未处理长度不足3的
Code,这才是触发报错的核心原因
用pandas的apply或str方法处理,既能避免手动遍历的繁琐,也能更优雅地处理异常数据。
内容的提问来源于stack exchange,提问作者Фома Ф
相关产品推荐
相关产品推荐

