首页 > 应用开发 > Python > 玩转python字符串——工资字符串
以下情况形如[“1.5-2千/月”,"1.5-2万/月",“15-20万/年”,"40-60万/年"]的列表(为了简化计算),以下函数可以直接使用。
要求:
(1)区分最高薪资与最低薪资
(2)统一单位为千/月
(3)保留两位有效小数,多余位数不补0,整数只保留整数
1、正则表达式,匹配出每个对应的值
_pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])')
2、取出findall的值
_ret = re.findall(_pattern, salary)
结果形如[("1.5","2","千","月")]的列表
3、位数函数,保留两位有效数字,多余位数不补0
def re_process(ret):
if float(ret).is_integer():
answer = str(ret).replace('.0', '')
else:
answer = round(float(ret), 2)
answer = str(answer).rstrip('0')
return answer
4、主函数
def salary_cal(salary): _pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])') _ret = re.findall(_pattern, salary) h_salary = '' l_salary = '' if _ret: _ret = _ret[0] if _ret[2] == '千' and _ret[3] == '月': h_salary = _ret[1] + '千/月' l_salary = _ret[0] + '千/月' elif _ret[2] == '万': if _ret[3] == '月': h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月' l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月' else: h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月' l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月' return l_salary, h_salary
返回处理值,(最低薪资,最高薪资)
5、测试,测试函数
lst = [] for i in ret: h, l = salary_cal(str(i)) lst.append([h, l]) print(lst) lst的结果为[[最低薪资,最高薪资],[最低薪资,最高薪资],....]的一个二维列表 以上就是这个功能的全部介绍,上源代码!
import pandas as pd
import re
from decimal import Decimal
a = pd.read_csv('message.csv')
ret = list(a['薪资'].fillna('-'))
def re_process(ret):
if float(ret).is_integer():
answer = str(ret).replace('.0', '')
else:
answer = round(float(ret), 2)
answer = str(answer).rstrip('0')
return answer
def salary_cal(salary):
_pattern = re.compile(r'(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)([千万])/([月年])')
_ret = re.findall(_pattern, salary)
h_salary = ''
l_salary = ''
if _ret:
_ret = _ret[0]
if _ret[2] == '千' and _ret[3] == '月':
h_salary = _ret[1] + '千/月'
l_salary = _ret[0] + '千/月'
elif _ret[2] == '万':
if _ret[3] == '月':
h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
else:
h_salary = str(re_process(Decimal(_ret[1]) * 10)) + '千/月'
l_salary = str(re_process(Decimal(_ret[0]) * 10)) + '千/月'
return l_salary, h_salary
lst = []
for i in ret:
h, l = salary_cal(str(i))
lst.append([h, l])
print(lst)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69991606/viewspace-2745054/ ,如需转载,请注明出处,否则将追究法律责任。