我發佈了一個「第1部分」的問題,讓我回到我需要的功能here的答案,但認爲這證明了自己的問題。如果不是,我會刪除。案例不敏感的替換(映射)
我想將一個函數應用於一個數據框,該數據框將全稱替換爲縮寫(New York -> NY
)。然而,我注意到在我的數據集中,如果一個國家是大寫字母,它顯然不會匹配該字幕。我試圖解決它,但似乎無法破解密碼:
import pandas as pd
import numpy as np
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN],
'B' : [1,0,3,5,0,0,np.NaN,9,0,0],
'C' : ['Pharmacy of IDAHO','NY Pharma','NJ Pharmacy','Idaho Rx','CA Herbals','Florida Pharma','AK RX','Ohio Drugs','PA Rx','USA Pharma'],
'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
import us
statez = us.states.mapping('abbr', 'name')
inv_map = {v: k for k, v in statez.items()}
def replace_states(company):
# find all states that exist in the string
state_found = filter(lambda state: state.lower() in company.lower(), statez.values())
# replace each state with its abbreviation
for state in state_found:
print(state, inv_map[state])
company = company.replace(state, inv_map[state])
print("---" , company)
# return the modified string (or original if no states were found)
return company
dfp['C'] = dfp['C'].map(replace_states)
輸出:注意缺少變化的「愛達荷藥房」
Idaho ID
--- Pharmacy of IDAHO
Idaho ID
--- ID Rx
Florida FL
--- FL Pharma
Ohio OH
--- OH Drug
有沒有一種方法,使這個函數不區分大小寫?
我知道它有點違反直覺,但我實際上想從完整的國家名稱到縮寫版本。例如:'Ohio - > OH' – MattR
@MattR,嗯。 ..,這使得它更具挑戰性。讓我嘗試另一種解決方案... – MaxU
已經進行了一些編輯,所以我不確定我之前發佈了哪些內容,但第一部分完全符合我的需求。但是,我不知道你是怎麼做到的!但它非常出色。任何解釋都會很棒,但並不需要尊重你的時間和幫助! – MattR