如何使用geopy获取数据帧中地址列的纬度和纬度



我目前正在开发一个kaggle数据集房价预测

它在纬度和纬度列中有错误,所以我决定使用geopy来获得这两列的正确值。

如果我在一个地址上使用它,效果很好,但如果应用于整个列,则返回None。


city = []
lat = []
longi = []
for addr in train_df['address']:
geolocator = Nominatim(user_agent="ram")
location  = geolocator.geocode(addr), timeout=100, language = 'en')
city.append(location.address.split(',')[-4])
lat.append(location.latitude)
longi.append(location.longitude)

它返回None,可能是因为多次访问。

请帮我建议一些其他方法来获取数据帧的"地址"列的纬度和经度(或用于相同工作的其他库(。

问题出在数据集的地址上。如果你使用下面的try-catch代码,你可以看到数据集中有很多错误的地址。

for addr in train_df['ADDRESS']:
geolocator = Nominatim(user_agent="ram")
location = geolocator.geocode(addr, timeout=10000, language = 'en')
try:
city.append(location.address.split(',')[-4])
lat.append(location.latitude)
longi.append(location.longitude)
except:
print(addr)

例如,其中一个地址是";Garebhavipalya,Bangalore";。如果你在谷歌上搜索,正确的地址是";Garvebhavi Palya,Bangalore";。它是"Garvebhavi Palya";但是数据集显示为"0";Garebhavipalya,Bangalore";。因此,如果你用下面的代码检查这个地址,你可以得到班加罗尔的地址,经度和纬度都接近数据集的数据。

geolocator = Nominatim(user_agent="ram")
location = geolocator.geocode("Garvebhavi Palya,Bangalore", timeout=100, language = 'en')
print(location.address)
print(location.latitude)
print(location.longitude)

要检查给定数据集的经度和纬度的地址,可以使用反向操作。

geolocator = Nominatim(user_agent="ram")
location = geolocator.reverse("12.96991,77.59796")
print(location.address)

由于我不熟悉班加罗尔,我不确定数据集的lat 12.96991和lon 77.59796是这样的";Garebhavipalya,Bangalore;地址与否。但我认为问题在于";地址";的数据集。

顺便说一句,我觉得这个GeoPy库真的很好。当你在这里问的时候我就知道了。谢谢你的提问:(

最新更新