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

使用geolib库调用geohash.neighbours出现ValueError: substring not found错误

报错原因
  • 核心问题是你从异常中取到的geohash值带多余符号:字典匹配失败抛出的KeyError直接转为字符串时,会自动在key前后加上单引号,你实际传入geohash.neighbours的不是纯字符9qh0g,而是带前后单引号的'9qh0g',不符合geohash编码规则,因此触发字符匹配失败的报错。你打印输出中显示的'9qh0g'自带引号就是直接证据,硬编码时你传入的是不带额外引号的纯geohash值,因此可以正常运行。
  • 额外逻辑问题:你将try-except套在整个df.apply外层,只要有任意一行匹配失败,整个DataFrame的赋值操作就会终止,剩余行的匹配逻辑不会执行,不符合逐行处理的需求。
修复方案

将异常捕获逻辑放到逐行处理的逻辑内部,直接从KeyError的参数中取原始key值,避免多余符号:

import pandas as pd
from geolib import geohash

geo_dict = {'9q5dx': 10, '9q9hv': 15, '9q5dv': 20}
df = pd.DataFrame({'geohash': ['9q5dx','9qh0g','9q9hv','9q5dv'],
                   'label': ['a', 'b', 'c', 'd']})

def get_value(geohash_val):
    try:
        return geo_dict[geohash_val]
    except KeyError as e:
        # 直接取异常参数里的原始key,无多余引号
        neighbours = geohash.neighbours(e.args[0])
        # 此处可按你的业务需求处理周边返回值,比如计算周边对应值的汇总,示例返回None
        return None

df['value'] = df['geohash'].apply(get_value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:10