You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python reverse_geocoder验证日本城市名称正确性

完成日本城市名称验证的Python代码指导

嘿,我来帮你把这段日本城市名称的验证逻辑补全!你已经搭好基础框架了,接下来咱们一步步完成剩下的部分,高效搞定城市名的验证工作:

1. 批量查询反向地理编码结果

reverse_geocodersearch()方法支持批量传入坐标列表,比你原来写的循环逐个查询效率高太多了!直接把打包好的coord列传进去就行:

# 批量查询经纬度对应的地理信息,返回字典列表
results = rg.search(df['coord'].tolist())

返回的results里,每个字典都包含了name(匹配到的城市名)、admin1(一级行政区,比如日本的都道府县)、cc(国家代码)这些关键信息,刚好用来和你的原始数据做对比。

2. 把验证结果合并到表格里

我们把查询到的真实城市名、行政区等信息提取出来,作为新列加到原DataFrame中,方便后续对比:

# 提取验证后的城市名、行政区和国家代码
df['verified_city'] = [res['name'] for res in results]
df['verified_admin'] = [res['admin1'] for res in results]
df['country_code'] = [res['cc'] for res in results]

3. 标记原始城市名是否匹配

接下来核心的一步:对比原始城市名和验证后的城市名,标记是否匹配。考虑到日文可能有汉字、平假名、片假名混合的情况,咱们可以用jaconv库统一格式,减少误判(先装库:pip install jaconv):

import jaconv

# 这里把'city'换成你Excel里实际的城市名称列名!
df['match'] = np.where(
    # 统一转成平假名并去除空格后对比
    jaconv.kata2hira(df['city']).strip() == jaconv.kata2hira(df['verified_city']).strip(),
    '匹配',
    '不匹配'
)

如果你的数据是英文城市名,直接转成小写对比就行,去掉jaconv的部分即可。

4. 处理查询异常情况

有些经纬度可能在海洋或者偏远无人区,reverse_geocoder可能返回空值,咱们加一列标记查询状态,方便后续排查:

# 标记每个坐标的查询是否成功
df['query_status'] = ['成功' if res['name'] else '查询失败' for res in results]

完整代码整合

把上面的步骤拼起来,就是完整的验证代码了:

import reverse_geocoder as rg
import pandas as pd
import numpy as np
import jaconv  # 处理日文格式用,不需要的话可以删掉

# 读取Excel表格
df = pd.read_excel('desktop/japan.xlsx')
# 合并经纬度为坐标对
df['coord'] = list(zip(df.lat, df.long))

# 批量查询反向地理编码
results = rg.search(df['coord'].tolist())

# 提取验证信息到表格
df['verified_city'] = [res['name'] for res in results]
df['verified_admin'] = [res['admin1'] for res in results]
df['country_code'] = [res['cc'] for res in results]

# 验证城市名称匹配(替换'city'为你的实际列名)
df['match'] = np.where(
    jaconv.kata2hira(df['city']).strip() == jaconv.kata2hira(df['verified_city']).strip(),
    '匹配',
    '不匹配'
)

# 标记查询状态
df['query_status'] = ['成功' if res['name'] else '查询失败' for res in results]

# 预览前5行结果
print(df[['city', 'verified_city', 'match', 'query_status']].head())

# 保存验证后的表格到本地
df.to_excel('desktop/japan_verified.xlsx', index=False)

一些实用提示

  • 确保reverse_geocoder已经安装:pip install reverse_geocoder,它用的是本地数据库,不需要联网,速度很快
  • 如果遇到“不匹配”的行,别直接判定原始数据错了——有可能是经纬度对应的是城市郊区,反向编码返回了市中心的名称,需要手动检查
  • 如果需要更实时的地理数据,可以考虑用OpenStreetMap的Nominatim或者Google Maps API,但这些需要API密钥,还有请求次数限制

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

火山引擎 最新活动