位置列示例:
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
。请让我知道我该如何解决。
答案 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'}
然后我们使用replace
和split
产生结果
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