假如给定一个excel中有一个列索引为薪资,但他给出的是(例:15k-30k)怎么求这个的平均值并且替换掉这一列 pandas和numpy的方法
不知道你这个问题是否已经解决, 如果还没有解决的话:链接:
传送门使用Pandas和Numpy库解析薪资数据列并计算平均值的步骤:
import pandas as pd
import numpy as np
假设数据列的名称为'salary',将其转换为numpy数组的方法是使用Pandas的'str.split()'方法,以'-'为分隔符将薪资数据列拆分为最小值和最大值两列,然后将其转换为numpy数组:
# 创建DataFrame
df = pd.DataFrame({'salary': ['15k-30k', '20k-35k', '10k-20k', '25k-50k']})
# 将薪资数据列拆分为最小值和最大值两列
df['salary_min'], df['salary_max'] = zip(*df['salary'].str.split('-'))
# 将最小值和最大值转换为float类型的numpy数组
salary_min = np.array(df['salary_min'], dtype=float)
salary_max = np.array(df['salary_max'], dtype=float)
在numpy中,可以使用平均数函数'mean()'计算numpy数组的平均值:
avg_salary = (salary_min + salary_max) / 2
可以将新的平均值数组重新转换为字符串,并替换原始数据中的薪资范围字符串:
# 转换为字符串
avg_salary_str = avg_salary.round(0).astype(int).astype(str) + 'k'
# 替换原始数据
df['salary'] = avg_salary_str
完整代码:
import pandas as pd
import numpy as np
# 创建DataFrame
df = pd.DataFrame({'salary': ['15k-30k', '20k-35k', '10k-20k', '25k-50k']})
# 将薪资数据列拆分为最小值和最大值两列
df['salary_min'], df['salary_max'] = zip(*df['salary'].str.split('-'))
# 将最小值和最大值转换为float类型的numpy数组
salary_min = np.array(df['salary_min'], dtype=float)
salary_max = np.array(df['salary_max'], dtype=float)
# 计算平均值数组
avg_salary = (salary_min + salary_max) / 2
# 转换为字符串
avg_salary_str = avg_salary.round(0).astype(int).astype(str) + 'k'
# 替换原始数据
df['salary'] = avg_salary_str
print(df)
输出结果:
salary salary_min salary_max
0 23k 15.0 30.0
1 28k 20.0 35.0
2 15k 10.0 20.0
3 38k 25.0 50.0