首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python将地理编码结果从地址到经纬度保存到原始数据

用Python将地理编码结果从地址到经纬度保存到原始数据
EN

Stack Overflow用户
提问于 2021-01-14 03:22:02
回答 1查看 59关注 0票数 0

给定一个小的数据集df如下:

代码语言:javascript
复制
   id             name address
0   1        ABC tower  北京市朝阳区
1   2          AC park  北京市海淀区
2   3      ZR hospital  上海市黄浦区
3   4  Fengtai library     NaN
4   5     Square Point  上海市虹口区

我想获得经度latidudeaddress列,并将它们附加到原始数据中。请注意,在NaN列中有address

下面的代码给出了一个具有地址、经度和纬度的表,但是它忽略了NaN地址行,还应该改进代码:

代码语言:javascript
复制
import pandas as pd
import requests
import json

df = df[df['address'].notna()]

res = []

for addre in df['address']:
    url = "http://restapi.amap.com/v3/geocode/geo?key=f057101329c0200f170be166d9b023a1&address=" + addre
    dat = {
            'count': "1",
            }
    r = requests.post(url, data = json.dumps(dat))
    s = r.json()
    infos = s['geocodes']
    for j in range(0, 10000):
        # print(j)
        try:
            more_infos = infos[j]
            # print(more_infos)
        except:
            continue
        try:
            data = more_infos['location']
            # print(data)
        except:
            continue
        try:
            lon_lat = data.split(',')
            lon = float(lon_lat[0])
            lat = float(lon_lat[1])
        except:
            continue
        res.append([addre, lon, lat])
    result = pd.DataFrame(res)
    result.columns = ['address', 'longitude', 'latitude']
    print(result)
    result.to_excel('result.xlsx', index = False)

退出:

代码语言:javascript
复制
 address   longitude   latitude
0  北京市朝阳区  116.601144  39.948574
1  北京市海淀区  116.329519  39.972134
2  上海市黄浦区  121.469240  31.229860
3  上海市虹口区  121.505133  31.264600

但我如何才能得到如下的最终结果呢?谢谢你事先的好意帮助。

代码语言:javascript
复制
   id             name address   longitude   latitude
0   1        ABC tower  北京市朝阳区  116.601144  39.948574
1   2          AC park  北京市海淀区  116.329519  39.972134
2   3      ZR hospital  上海市黄浦区  121.469240  31.229860
3   4  Fengtai library     NaN         NaN        NaN
4   5     Square Point  上海市虹口区  121.505133  31.264600
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-14 03:28:31

使用pd.merge,因为result是经纬度数据。

代码语言:javascript
复制
dfn = pd.merge(df, result, on='address', how='left')

代码语言:javascript
复制
for _, row in df.iterrows():
    _id = row['id']
    name = row['name']
    addre = row['address']
    
    if pd.isna(row['address']):
        res.append([_id, name, addre, None, None])
        continue

    ###### same code  ######
    url = '...'
    # ...
    ###### same code  ######
        res.append([_id, name, addre, lon, lat])
    result = pd.DataFrame(res)
    result.columns = ['id', 'name', 'address', 'longitude', 'latitude']
    print(result)
    result.to_excel('result.xlsx', index = False)  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65712961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档