用Python映射15,000个城市的有效方法

问题描述 投票:2回答:3

我有大约15,000个观测值的数据集。该观察结果是来自世界各地的城市名称。这个数据集已经被来自许多不同国家的人们所填充,这意味着我用相同的语言用相同的语言重复了几个城市。参见以下DF摘录:

city_name bruselas brussel brussels brussels brussels auderghem bruxelles bruxelles belgium munchen munchenstein munchwilen munderkingen mundolsheim mungia munguia munich munich munich munich germany munich munchen munich rupert mayer strasse

任务是将DF中的所有城市都映射到其英文名称,但是,因为这些城市的格式和语言不同,所以我发现很难找到一种解决方案,除了手动执行此任务外,这不是我们要进行15,000多个观察,因此具有很高的生产力。最终数据集应如下所示(仅使用上面的一些观察结果):

city_name mapped_city brussels auderghem Brusels bruxelles Brusels bruxelles belgium Brusels munchen Munich munich germany Munich

任何帮助将不胜感激

python algorithm sorting dataframe
3个回答
1
投票

使用使用Levenshtein distance algorithm的模糊模糊

import pandas as pd
from fuzzywuzzy import process, fuzz

df = pd.read_clipboard(sep='\t')
print(df.head(5))
0     brussels
1    auderghem
2    bruxelles
3    bruxelles
4      belgium

我们需要一个城市的主列表来用作查找,我假设您知道城市是什么,我将使用来自github的城市。

cities = pd.read_csv('https://datahub.io/core/world-cities/r/0.csv')

choices = df['City Names'].to_dict()
lookups = cities['name'].tolist()


res = [(lookup,) + item for lookup in lookups for item in process.extract(lookup, choices,limit=2)]
df = pd.DataFrame(res, columns=["lookup", "matched", "score", "idx"])

print(df)
  lookup    matched  score  idx
9401     Munich     munich    100   13
12612    Mungia     mungia    100   10
9400     Munich     munich    100   12
1820   Brussels   brussels    100    0
12613    Mungia    munguia     92   11
...         ...        ...    ...  ...
27205    Желино  auderghem      0    1
27204    Желино   brussels      0    0
27487   Зуунмод  auderghem      0    1
27486   Зуунмод   brussels      0    0
27212    Теарце   brussels      0    0

自然,如果您事先编辑查找数据框以仅将您知道的城市保留在列表中,那么这将使查找运行更快并返回所需的结果。

例如,e]

lookups = ['brussels','munich']

print(df.sort_values('score',ascending=False))
     lookup    matched  score  idx
0  brussels   brussels    100    0
2    munich     munich    100   12
3    munich     munich    100   13
1  brussels  bruxelles     71    2

然后您可以以最高分进行查找。

希望这会为您指明正确的方向。我不是这个库的专家,所以最好仔细阅读您的用例文档以优化代码。祝你好运。


1
投票

您可以只使用Google Maps或OpenStreetMap来搜索那些地方并查看它们返回的内容。两者似乎都能处理带有或不带有国家/地区的不同语言(例如慕尼黑/慕尼黑,北京/北京)的查询,以及一些拼写错误(例如不带“ü”的“ munchen”)。


0
投票
尝试通过减少城市工作量的首字母映射
© www.soinside.com 2019 - 2024. All rights reserved.