在Python中正确保存/导入地理编码数据

问题描述 投票:0回答:1

我有一个用python地理编码的地址列表。我正在使用免费的Nominatim地理编码器,因此地理编码步骤每个地址需要1秒。我想保存经过地理编码的数据,因此不必每次运行程序时都重复进行地理编码的步骤。然后,我想使用该数据计算距离。我的问题是,当我将数据保存到csv并在distance函数中读回时,不再将其识别为纬度经度位置。如何正确保存或读取它,以便将其识别为纬度和经度位置?

下面的示例代码在没有行df = pd.read_csv('Data/Location/Final/RCs_AddressGeo.csv')的情况下运行,但是当包含该行时会引发错误:

“ ValueError:无法从字符串创建Point实例:未知格式。“

import pandas as pd
from geopy.distance import geodesic as dist

df = pd.read_excel('Data/Location/Final/RCs_Address.xlsx')
locator = Nominatim(user_agent='myGeocoder')
geocode = RateLimiter(locator.geocode, min_delay_seconds=1)
df['geo'] = df['address'].apply(geocode)
df['point'] = df['geo'].apply(lambda x: (x.latitude, x.longitude))
df.to_csv('Data/Location/Final/RCs_AddressGeo.csv')

df = pd.read_csv('Data/Location/Final/RCs_AddressGeo.csv')
v = df['point'][0]
d1 = df['point'].apply(lambda x: dist(x, v).miles)
python geocoding
1个回答
0
投票

我最终得到了以下代码。它可以工作,但是我不明白为什么list(zip())命令可以解决问题。如果有人可以解释,将很有帮助。

import pandas as pd
from geopy.distance import geodesic as dist

df = pd.read_excel('Data/Location/Final/RCs_Address.xlsx')
locator = Nominatim(user_agent='myGeocoder')
geocode = RateLimiter(locator.geocode, min_delay_seconds=1)
df['geo'] = df['address'].apply(geocode)
df['latitude'] = df['geo'].apply(lambda x: x.latitude)
df['longitude'] = df['geo'].apply(lambda x: x.longitude)
df.to_csv('Data/Location/Final/RCs_AddressGeo.csv')

df = pd.read_csv('Data/Location/Final/RCs_AddressGeo.csv')
df['point'] = list(zip(df['latitude'], df['longitude']))
v = df['point'][0]
d1 = df['point'].apply(lambda x: dist(x, v).miles)
© www.soinside.com 2019 - 2024. All rights reserved.