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
相关产品推荐
相关产品推荐

