You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求支持Python 3.6的邮编转城市信息库(适配德国及欧洲)

刚好之前帮朋友处理过类似的德国邮编匹配需求,结合你用Python3.6的情况,给你几个实用的方案,亲测适配性拉满:

方案1:本地数据集+Pandas合并(最稳定,适合大数据量)

很多第三方库要么版本兼容坑多,要么只支持美区,直接用公开的德国邮编本地数据集反而更靠谱,还方便未来扩展其他欧洲国家。

  • 操作步骤:
    1. 找一份靠谱的德国邮编CSV数据,一般包含PLZ(邮编)、Ort(城市)、Bundesland(州)这些核心字段,德国联邦统计局或者一些公开数据平台都能下载到。
    2. 把数据集读成Pandas DataFrame,和你的主数据用邮编字段做左连接,注意一定要把邮编存成字符串类型,不然像01067这种带前导零的邮编会被转成数字丢失信息:
    import pandas as pd
    
    # 模拟你的主数据集,邮编列名叫'plz'
    main_df = pd.DataFrame({'plz': ['10178', '80331', '60313']})
    
    # 读入本地德国邮编数据(根据你下载的文件调整列名和路径)
    de_zip_data = pd.read_csv('german_postal_codes.csv', dtype={'plz': str})
    
    # 合并后自动新增城市、州列
    final_df = main_df.merge(de_zip_data[['plz', 'ort', 'bundesland']], on='plz', how='left')
    
  • 优势:完全兼容Python3.6,数据自己掌控,后续加法国、意大利等其他欧洲国家的邮编数据,只要重复这个合并流程就行,没有库版本依赖问题。

方案2:Geopy+Nominatim(实时查询,适合小数据量)

如果你的数据量不大,不想折腾本地数据集,可以用geopy调用OpenStreetMap的Nominatim服务,实时解析邮编对应的地理信息,这个库有兼容Python3.6的稳定版本。

  • 先安装指定版本:pip install geopy==1.20.0
  • 代码示例:
    from geopy.geocoders import Nominatim
    import pandas as pd
    
    # 初始化编码器,指定德语环境+德国区域限制,避免返回其他国家的结果
    geolocator = Nominatim(user_agent="my_zip_lookup_app", country_bias='de')
    
    def extract_geo_info(zip_code):
        try:
            # 构造查询字符串,明确指定德国
            location = geolocator.geocode(f"{zip_code}, Deutschland")
            if location:
                address_components = location.raw.get('address', {})
                # 优先取city,没有的话取town/village
                city = address_components.get('city', address_components.get('town', address_components.get('village')))
                state = address_components.get('state')
                return pd.Series([city, state])
            return pd.Series([None, None])
        except Exception as e:
            print(f"查询邮编{zip_code}出错:{e}")
            return pd.Series([None, None])
    
    # 把解析结果批量加到主DataFrame里
    main_df = pd.DataFrame({'plz': ['10178', '80331', '60313']})
    main_df[['city', 'state']] = main_df['plz'].apply(extract_geo_info)
    
  • 优势:不用存本地数据,未来扩展到其他欧洲国家,只要修改country_bias参数(比如改成'fr'对应法国)就行。
  • 提醒:Nominatim有请求频率限制,别疯狂刷接口,大数据量还是建议用方案1。

方案3:Pycountry标准化州信息(可选)

如果需要统一州的名称格式(比如把各种写法的巴伐利亚统一成"Bayern"),可以用pycountry库,它也有兼容Python3.6的版本:

  • 安装指定版本:pip install pycountry==19.8.18
  • 代码示例:
    import pycountry
    
    def standardize_german_state(state_name):
        if not state_name:
            return None
        try:
            # 精准匹配德国的州
            state = pycountry.subdivisions.get(name=state_name, country_code='DE')
            return state.name  # 也可以用state.code获取官方编码,比如'DE-BY'
        except:
            # 匹配不到就返回原名称
            return state_name
    
    # 给主DataFrame新增标准化后的州列
    main_df['state_standardized'] = main_df['state'].apply(standardize_german_state)
    

内容的提问来源于stack exchange,提问作者GileBrt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:02