ANZ虚拟实习Pandas处理经纬度报IndexError及字符串替换失败问题
ANZ交易数据集问题排查解决方案
1. merchant_long_lat经纬度转换IndexError报错修复
报错根因
即使字段整体存在,只要单条数据存在以下情况,拆分后取索引1的操作就会触发越界:
- 字段值为pandas原生空值NaN
- 字段值为
n/a/无效字符串,拆分后长度小于2 - 字段值不存在空格分隔符
排查命令
运行以下代码定位异常行:
# 统计所有行拆分后的长度分布 print(data['merchant_long_lat'].str.split(' ').str.len().value_counts()) # 筛选出拆分后长度不足2的异常记录 print(data[data['merchant_long_lat'].str.split(' ').str.len() < 2]['merchant_long_lat'])
修复代码
在列表推导式中增加合法性校验,避免越界,同时优化重复拆分逻辑:
data["merchant_long_lat"] = [ coords.split(" ")[::-1] if isinstance(coords, str) and len(coords.split(" ")) == 2 else [None, None] for coords in data.merchant_long_lat ]
2. n/a字符串替换不生效修复
失效根因
常见触发场景有3类:
- 待替换的
n/a不是字符串类型,是pandas原生NaN空值,字符串匹配规则无法命中 n/a存在前后空格、大小写变体(如N/a、N/A),精确匹配无法命中- 替换操作未设置
inplace=True,也没有将结果赋值回原字段,修改未落地
排查命令
运行以下代码定位匹配失效原因:
# 统计原生空值数量 print("原生NaN数量:", data['merchant_long_lat'].isna().sum()) # 模糊匹配所有形式的n/a print("变体n/a数量:", data['merchant_long_lat'].astype(str).str.strip().str.lower().eq('n/a').sum())
修复代码
统一处理所有空值和变体格式的n/a,确保替换生效:
# 先统一清洗格式,再批量替换所有无效值 data['merchant_long_lat'] = data['merchant_long_lat'].astype(str).str.strip().str.lower() data['merchant_long_lat'] = data['merchant_long_lat'].replace(['n/a', 'nan'], None)
内容的提问来源于stack exchange,提问作者Bilal Ahmed
相关产品推荐
相关产品推荐

