使用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
相关产品推荐
相关产品推荐

