使用正则表达式将具有多个值的字典映射到键

时间:2018-10-30 01:01:53

标签: python regex python-3.x pandas dictionary

位置列示例:

file= pd.DataFrame(columns = ['location'])
file['location'] = ['India, city3','city3','city2','china']

new_dict示例(它是默认的dict):

new_dict = {'India':['India','city1', 'city2', 'city3'],'China':['China','city4','city5']}

预期输出:

India
India
India
China

示例代码:

for x in file['location']:
    for Country,Cities in new_dict.items():
        if re.findall('(?<![a-zA-Z])'+str(Cities).lower()+'(?![a-zA-Z])', str(x).lower()) != None:
            file['COUNTRY'] = Country

我目前正在尝试使用字典将城市映射到国家/地区。我试图将一些正则表达式合并在一起,因为列location将不会提供完全匹配的内容。我收到此错误bad character range i-d at position 1408。请让我知道我该如何解决。

1 个答案:

答案 0 :(得分:1)

首先,您需要使用ChainMap来压平newdict。

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys,new_dict.values() , new_dict.keys())))
d
Out[49]: 
{'China': 'China',
 'India': 'India',
 'city1': 'India',
 'city2': 'India',
 'city3': 'India',
 'city4': 'China',
 'city5': 'China'}

然后我们使用replacesplit产生结果

sample_df.replace(d,regex=True).location.str.split(',').str[0]
Out[53]: 
0    India
1    India
2    India
3    china
Name: location, dtype: object