我目前正在从事一个数据科学项目。想法是清除“glassdoor_jobs.csv”中的数据,并以更易于理解的方式呈现它。
import pandas as pd
df = pd.read_csv('glassdoor_jobs.csv')
#salary parsing
#Removing "-1" Ratings
#Clean up "Founded"
#state field
#Parse out job description
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:', ''))
df['min_salary'] = minus_hr.apply(lambda x: int(x.split('-')[0]))
df['max_salary'] = minus_hr.apply(lambda x: int(x.split('-')[1]))
我在最后一行收到错误。挖掘了一下之后,我发现在 minus_hr 中,一些“薪资估算”只有一个数字而不是范围:
指数 | 薪资预估 |
---|---|
0 | 150 |
1 | 58 |
2 | 130 |
3 | 125-150 |
4 | 110-140 |
5 | 200 |
6 | 67-77 |
等等。现在我试图弄清楚如何解决“列表索引超出范围”,并使 max_salary 与只有一个值的单元格的 min_salary 相同。
我还试图获得最低和最高工资之间的平均值,如果单元格只有一个值,则将该值设为平均值
所以最后,像索引 0 这样的东西看起来像:
指数 | 分钟 | 最大限度 | 平均数 |
---|---|---|---|
0 | 150 | 150 | 150 |
您必须在某处添加条件语句。
df['min_salary'] = minus_hr.apply(lambda x: int(x.split('-')[0]) if '-' in x else x)
上面可能会这样做,或者您可以定义一个函数。
def max_salary(cell_value):
if '-' in cell_value:
max_salary = split(cell_value, '-')[1]
else:
max_salary = cell_value
return max_salary
df['max_salary'] = minus_hr.apply(lambda x: max_salary(x))
def avg_salary(cell_value):
if '-' in cell_value:
salaries = split(cell_value,'-')
avg = sum(salaries)/len(salaries)
else:
avg = cell_value
return avg
df['avg_salary'] = minus_hr.apply(lambda x: avg_salary(x))
交换 min_salary 并重复
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句