2024-05-13 21:49:14 发布
网友
我的代码如下所示
df2['min_salary'] = min_hr.apply(lambda x: int(x.split('-')[0])) df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1]))
它使用的数据是一个薪水列,看起来像80-100 “最低工资”可以正常工作,但“最高工资”不断出现错误。我做错什么了吗
像这样试试。如果“x”中没有-的话,这个应该可以处理
df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1] if len(x.split('-'))>1 else x.split('-')[0]))
def min_max_value(sal_string): fields = x.split('-') if len(fields)>1: if fields[0].strip().isdigit(): min_field = int(fields[0].strip()) else: min_field = None if fields[1].strip().isdigit(): max_field = int(fields[0].strip()) else: max_field = None else: if fields[0].strip().isdigit(): min_field = int(fields[0].strip()) else: min_field, max_field = None, None return min_field, max_field df2[['min_salary','max_salary']] = min_hr.apply(min_max_value, result_type="expand")
你可以试试这样的
正如Tim指出的,您可能有一些数据不符合您试图拆分字符串的确切格式。您可以尝试这种方法,将NaN添加到任何未通过拆分生成两个值的列中:
NaN
df2[["min_salary", "max_salary"]] = min_hr.str.split("-").apply(pd.Series)
下面是在此数据帧的"A"列上使用该代码(并命名两个新列"Ax"和"Ay")后的输出示例:
"A"
"Ax"
"Ay"
A Ax Ay 0 10-20 10 20 1 30-40 30 40 2 70 70 NaN
请注意,如果希望将单个薪资值填入"max_salary"列,则需要使用稍微不同的方法:
"max_salary"
df2[["min_salary", "max_salary"]] = min_hr.split("-").apply(lambda x: [np.nan]*(len(x) < 2) + x).to_list()
它将70放在Ay列中:
70
Ay
A Ax Ay 0 10-20 10 20 1 30-40 30 40 2 70 NaN 70
另一种方法(在这种特殊情况下可能是理想的)是横向填充NaN:
df2[["min_salary", "max_salary"]] = min_hr.str.split("-").apply(pd.Series).ffill(axis=1)
A Ax Ay 0 10-20 10 20 1 30-40 30 40 2 70 70 70
请注意,这些解决方案都不会将数据转换为数字类型
像这样试试。如果“x”中没有-的话,这个应该可以处理
你可以试试这样的
正如Tim指出的,您可能有一些数据不符合您试图拆分字符串的确切格式。您可以尝试这种方法,将
NaN
添加到任何未通过拆分生成两个值的列中:下面是在此数据帧的
"A"
列上使用该代码(并命名两个新列"Ax"
和"Ay"
)后的输出示例:请注意,如果希望将单个薪资值填入
"max_salary"
列,则需要使用稍微不同的方法:它将
70
放在Ay
列中:另一种方法(在这种特殊情况下可能是理想的)是横向填充
NaN
:请注意,这些解决方案都不会将数据转换为数字类型
相关问题 更多 >
编程相关推荐