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

Python处理Glassdoor薪资数据时list index out of range错误如何解决

问题修复方案

报错核心原因是单值薪资字段调用split('-')后仅返回长度为1的列表,访问索引[1]时触发越界,可通过自定义薪资解析函数替换原有lambda表达式解决,修改后的完整代码如下:

import pandas as pd

df = pd.read_csv('glassdoor_jobs.csv')

# 基础字段处理
df['hourly'] = df['Salary Estimate'].apply(lambda x: 1 if 'per hour' in x.lower() else 0)
df['employer_provided'] = df['Salary Estimate'].apply(lambda x: 1 if 'employer provided salary' in x.lower() else 0)
df = df[df['Salary Estimate'] != '-1']

# 薪资文本清洗
Salary = df['Salary Estimate'].apply(lambda x: x.split('(')[0])
minus_Kd = Salary.apply(lambda x: x.replace('K', '').replace('$',''))
minus_hr = minus_Kd.apply(lambda x: x.lower().replace('per hour', '').replace('employer provided salary:', '').strip())

# 自定义薪资解析函数
def parse_salary(salary_str):
    salary_range = salary_str.split('-')
    if len(salary_range) == 1:
        # 单值薪资处理逻辑
        sal = int(salary_range[0].strip())
        return sal, sal, sal
    else:
        # 范围薪资处理逻辑
        min_sal = int(salary_range[0].strip())
        max_sal = int(salary_range[1].strip())
        avg_sal = (min_sal + max_sal) / 2
        return min_sal, max_sal, avg_sal

# 批量生成三个薪资字段
df[['min_salary', 'max_salary', 'avg_salary']] = minus_hr.apply(parse_salary).apply(pd.Series)

代码修改说明

  • 新增parse_salary自定义函数,自动判断薪资文本格式,单值薪资直接返回三个相同的数值,范围薪资分别计算最值和均值,从根源规避索引越界问题
  • 单次调用即可同时生成三个薪资字段,无需多次重复调用apply,提升处理效率
  • 新增strip()清除文本首尾多余空格,避免字符串转整数时出现格式错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:36:02