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



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

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

"值错误:无法从字符串创建点实例:未知 格式。

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)

我最终得到了以下代码。它可以工作,但我不明白为什么 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)

最新更新