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

如何从LocationIQ API返回的JSON结果中提取lat与lon字段

提取LocationIQ API返回结果中的lat和lon字段

直接提取法(最简洁高效)

API返回的是包含单个字典的列表,无需借助pandas的read_json或json_normalize,直接通过列表索引+字典键访问即可,同时建议把字符串类型的经纬度转为数值类型:

修改后的完整代码:

import pandas as pd
import requests

# 读取建筑文件CSV(UTF-8编码)
df = pd.read_csv('Building(LocationIQ).csv')

# 循环调用API获取经纬度并写入DataFrame
for i, row in df.iterrows():
    api_address = str(df.at[i, 'Address'])
    url = "https://us1.locationiq.com/v1/search"
    
    params = {
        'key': '******************',
        'q': api_address,
        'format': 'json',
        'limit': 1
    }
    
    response = requests.get(url, params=params)
    data = response.json()  # 直接使用requests内置的JSON解析方法
    
    # 确保返回结果非空(避免地址解析失败报错)
    if data:
        lat = float(data[0]['lat'])
        lon = float(data[0]['lon'])
        # 将经纬度存入原DataFrame
        df.at[i, '纬度'] = lat
        df.at[i, '经度'] = lon
        print(f"地址: {api_address} -> 纬度: {lat}, 经度: {lon}")

# 保存带经纬度的结果到新CSV
df.to_csv('Building_With_LatLon.csv', index=False)

使用json_normalize的方法(如果偏好pandas操作)

如果你坚持要用json_normalize,只需将返回的列表直接传入方法,再提取对应字段即可:

# 在循环内解析完data之后添加这段代码
if data:
    normalized_df = pd.json_normalize(data)
    # 提取第一条结果的lat和lon
    lat = float(normalized_df['lat'].iloc[0])
    lon = float(normalized_df['lon'].iloc[0])
    print(lat, lon)

为什么之前的方法失败?

  • pd.read_json更适合处理完整的JSON文件或批量JSON字符串,单条列表形式的JSON用它处理反而繁琐;
  • 若之前用json_normalize失败,大概率是没有正确传入列表格式的data(比如误传了字典而非列表)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:43:23