我有以下函數(shù)來(lái)檢測(cè)數(shù)據(jù)中的字符串,我加入了字典的鍵和值,因?yàn)槲蚁胝业竭@兩個(gè)值。我添加了 ^ 和 $ 因?yàn)槲抑幌胍_匹配。功能import pandas as pddef check_direction(df): # dict for all direction and their abbreviation direction = { '^Northwest$': '^NW$', '^Northeast$': '^NE$', '^Southeast$': '^SE$', '^Southwest$': '^SW$', '^North$': '^N$', '^East$': '^E$', "^South$": '^S$', "^West$": "^W$"} # combining all the dict pairs into one for str match all_direction = direction.keys() | direction.values() all_direction = '|'.join(all_direction) df = df.astype(str) df = pd.DataFrame(df.str.contains(all_direction, case = False)) return df我對(duì)以下系列進(jìn)行了測(cè)試,結(jié)果按預(yù)期工作:tmp = pd.Series(['Monday', 'Tuesday', 'Wednesday', 'Thursday'])check_direction(tmp)0 False1 False2 False3 Falsetmp = pd.Series(['SOUTH', 'NORTHEAST', 'WEST'])check_direction(tmp)0 True1 True2 True但是我在這里遇到了問(wèn)題:tmp = pd.Series(['32 Street NE', 'Ogden Road SE'])check_direction(tmp)0 False1 False由于 NE 和 SE,當(dāng)它應(yīng)該為 True 時(shí),兩者都返回為 false,我該如何修改我的代碼來(lái)實(shí)現(xiàn)這一點(diǎn)?
1 回答

慕碼人2483693
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
我認(rèn)為您誤解了^
和 的$
意思。
^
匹配整個(gè)字符串的開(kāi)頭,$
匹配整個(gè)字符串的結(jié)尾。
例如,'Ogden Road SE'
不匹配模式^SE$
,因?yàn)樽址灰?開(kāi)頭SE
。
您可能打算使用單詞邊界,即\b
.
所以你應(yīng)該改為^SE$
,\bSE\b
等等。
您可以通過(guò)編寫(xiě)來(lái)使其不那么乏味且更具可讀性
direction = {
'Northwest': 'NW',
'Northeast': 'NE',
'Southeast': 'SE',
'Southwest': 'SW',
'North': 'N',
'East': 'E',
'South': 'S',
'West': 'W'}
all_direction = direction.keys() | direction.values()
all_direction = '|'.join(r'\b{}\b'.format(d) for d in all_direction)
添加回答
舉報(bào)
0/150
提交
取消