有沒有辦法應用 lambda 陳述句而不必計算x.split(' ')[0]
兩次?我知道它可以使用一個函式來完成,即.apply(lambda x: pre_dir(x)
并處理那里的邏輯,但想知道它是否可以在單行中完成。
address.insert(6, 'PRE_DIR', address['STREETNAME'].apply(lambda x: x.split(' ')[0] if x.split(' ')[0] in ['N', 'S', 'E', 'W'] else ''))
uj5u.com熱心網友回復:
您可以使用where
而不是apply
. 換句話說,替換
address['STREETNAME'].apply(lambda x: x.split(' ')[0] if x.split(' ')[0] in ['N', 'S', 'E', 'W'] else '')
經過
address['STREETNAME'].str.split(' ').str[0].where(lambda x: x.isin(['N', 'S', 'E', 'W']), '')
示例:對于以下 DataFrame
address = pd.DataFrame({'STREETNAME':['North Ave', '1st St', 'W 34th St']})
上面的代碼產生以下列:
0
1
2 W
uj5u.com熱心網友回復:
對于 python ≥ 3.8,您可以使用賦值運算式:
lambda x: y if (y:=x.split(' ')[0]) in ['N', 'S', 'E', 'W'] else '')
也就是說,IIUC,你可以在這里使用正則運算式:
address['STREETNAME'].str.extract('^([NSEW]) ').fillna('')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460391.html