我的代碼看起來像這樣
df2['min_salary'] = min_hr.apply(lambda x: int(x.split('-')[0]))
df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1]))
它使用的資料是一個 Salary 列,看起來像這樣 80 - 100 最低工資作業正常,但最高工資不斷出現錯誤。難道我做錯了什么?
uj5u.com熱心網友回復:
像這樣嘗試。如果“x”沒有 - 在里面,這應該處理
df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1] if len(x.split('-'))>1 else x.split('-')[0]))
uj5u.com熱心網友回復:
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")
你可以嘗試這樣的事情。
uj5u.com熱心網友回復:
正如 Tim 指出的那樣,您的資料可能不符合您嘗試拆分字串的確切格式。您可以嘗試這種方法,它將添加NaN到任何未通過拆分產生兩個值的列中:
df2[["min_salary", "max_salary"]] = min_hr.str.split("-").apply(pd.Series)
這是在"A"此資料框的列上使用該代碼后的示例輸出(并命名兩個新列"Ax"和"Ay":
A Ax Ay
0 10-20 10 20
1 30-40 30 40
2 70 70 NaN
請注意,如果您希望將單個薪水值填充到該"max_salary"列中,則需要使用稍微不同的方法:
df2[["min_salary", "max_salary"]] = min_hr.split("-").apply(lambda x: [np.nan]*(len(x) < 2) x).to_list()
這使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
請注意,這些解決方案都沒有將您的資料轉換為數字型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311477.html
上一篇:如何遍歷類物件內的串列物件
