我发布了一个“第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