如何从格式不统一的DataFrame列中提取德国城市
从格式混乱的地址列提取德国城市到新列
可以借助德国城市字典来匹配提取,具体步骤如下:
1. 准备德国城市集合
先获取完整的德国城市列表,将其转为集合并按名称长度降序排序——这样能优先匹配较长的城市名,避免短地名(比如街道名里的小地名)误匹配。
2. 编写匹配函数
定义一个函数,遍历地址字符串,找出其中包含的城市名;如果有多个重复匹配(比如示例里的地址出现两次Berlin),取第一个匹配值即可。
3. 代码实现
import pandas as pd # 加载德国城市列表(假设你已将城市字典保存为每行一个城市的文本文件) with open('german_cities.txt', 'r', encoding='utf-8') as f: german_cities = [city.strip() for city in f.readlines()] # 按城市名长度降序排序,优先匹配长名称 german_cities_sorted = sorted(german_cities, key=lambda x: len(x), reverse=True) def extract_city(address): # 遍历排序后的城市列表,找到第一个匹配的城市 for city in german_cities_sorted: if city in address: return city # 无匹配时返回空值 return None # 示例DataFrame data = { 'Adresse': [ 'Karlstr 10, 10 B, 30,; 04916 Hamburg', 'München Dorfstr. 28-55, 22555', 'Marnstraße. Berlin 12, 45666 Berlin', 'Musterstr, 24855 Dresden', 'Muster Hausweg 11, Hannover, 56668', 'Mariestr. 4, 48669 Nürnberg', 'Hilden Weederstr 33-55, 56889', 'Pt-gaanen-Str. 2, 45883 Potsdam' ] } df = pd.DataFrame(data) # 提取城市到新列 df['Cities'] = df['Adresse'].apply(extract_city) # 查看结果 print(df[['Cities']])
4. 结果说明
运行后会得到你期望的Cities列:
Cities 0 Hamburg 1 München 2 Berlin 3 Dresden 4 Hannover 5 Nürnberg 6 Hilden 7 Potsdam
如果地址里无匹配城市,函数会返回None,你可以根据需求处理空值。
内容的提问来源于stack exchange,提问作者Kamran
相关产品推荐
相关产品推荐

