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

Pandas遍历DataFrame请求API取经纬度仅返回最后一行数据如何解决

错误原因

  • 数据库连接变量笔误:你定义的数据库连接对象是con_db,后续创建游标时调用了con.cursor(),con属于未定义变量,运行会直接报错。
  • URL拼接重复:你已经提前通过df['url_api'] = url_api + df['zip_code']生成了完整的请求地址,循环中又重复拼接了一次API前缀,实际请求的地址格式错误,无法正常拿到返回数据。
  • 列赋值逻辑错误:循环内写df['coord'] = xxx是对整个coord列统一赋值,每次循环都会覆盖所有行的该字段值,最终所有行都会保留最后一次循环的赋值结果,就是你看到的所有行经纬度完全相同的问题。

修正后代码

import json
import pandas as pd
import psycopg2
import urllib.request
import requests

# 修正连接变量名不一致问题
con = psycopg2.connect(host='', database='', user='', password='')
cursor = con.cursor()
cursor.execute("SELECT * FROM table WHERE district = 'Monjolos' limit 10")
result = cursor.fetchall()
df = pd.DataFrame(result)
df.columns = [columns[0] for columns in cursor.description]

url_api = 'https://cep.awesomeapi.com.br/json/'
df['url_api'] = url_api + df['zip_code']

for index, row in df.iterrows():
    # 直接用已经生成的完整url,不需要重复拼接前缀
    open_json = urllib.request.urlopen(row['url_api'])
    data = json.loads(open_json.read())
    # 只给当前行的coord字段赋值
    df.loc[index, 'coord'] = data['lat'] + ', ' + data['lng']
    
print(df[['id', 'url_api', 'coord']])

可选优化方案

你可以用apply方法替代iterrows遍历,代码更简洁,运行效率也更高:

def get_coord(url):
    open_json = urllib.request.urlopen(url)
    data = json.loads(open_json.read())
    return f"{data['lat']}, {data['lng']}"

df['coord'] = df['url_api'].apply(get_coord)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:12:03