You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x.split抛出IndexError: list index out of range,max_salary计算报错如何解决

问题根因
  • 核心触发逻辑:你调用split('-')拆分字符串时,部分行的待拆分内容拆分后返回的列表长度仅为1,访问索引[1]时自然触发越界错误。min_salary计算无异常是因为哪怕拆分后只有1个元素,索引[0]也可以正常取值。
  • 常见异常场景:
    • 部分行薪资无区间,为单个数值,比如"90"、"120以上"
    • 部分行的区间分隔符不是半角横杠-,比如使用了全角横杠-、波浪线~等
    • 部分行是异常值,比如空字符串、"薪资面议"等非数值内容
  • 额外排查点:你当前代码中两次apply的数据源均为min_hr,如果该变量不是原始薪资列的别名,也可能是该变量提前被截断处理,丢失了横杠后的内容。
解决步骤
  1. 先定位所有异常值,运行以下代码输出所有拆分异常的行:
# 输出所有拆分后长度不足2的异常内容
print(min_hr[min_hr.apply(lambda x: len(x.split('-')) < 2)])
  1. 根据异常值情况选择对应处理方案:
  • 若为分隔符不统一:先统一替换分隔符再加兜底逻辑处理单值情况
# 统一替换全角横杠、波浪线为半角横杠
min_hr = min_hr.str.replace('-|~', '-', regex=True)
# 拆分时加判断,单值情况下最高薪资等于最低薪资
df2['min_salary'] = min_hr.apply(lambda x: int(x.split('-')[0].strip()))
df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1].strip()) if len(x.split('-')) >=2 else int(x.split('-')[0].strip()))
  • 若存在大量非数值异常值:用自定义函数统一处理,异常值返回空
import pandas as pd
def parse_salary(salary_str):
    parts = salary_str.split('-')
    # 提取纯数字部分
    num_parts = [p.strip() for p in parts if p.strip().isdigit()]
    if len(num_parts) == 2:
        return int(num_parts[0]), int(num_parts[1])
    elif len(num_parts) == 1:
        return int(num_parts[0]), int(num_parts[0])
    else:
        return None, None

df2[['min_salary', 'max_salary']] = min_hr.apply(lambda x: pd.Series(parse_salary(x)))

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:54:04