将地理位置数据添加到 Pandas 数据框

Posted

技术标签:

【中文标题】将地理位置数据添加到 Pandas 数据框【英文标题】:Add geo-location data to Pandas data frame 【发布时间】:2014-12-11 18:45:45 【问题描述】:

我正在将 CSV 导入 pandas 数据框,然后尝试根据从 geopy.geocoders.GoogleV3() 检索到的数据在该数据框中创建三个新列:

import pandas from geopy.geocoders import GoogleV3

DATA = pandas.read_csv("file/to/csv") 
geolocator = GoogleV3()

DATA.googleaddress, (DATA.latitude, DATA.longitude) = geolocator.geocode(DATA.address)

问题是我不断收到此错误:

Traceback (most recent call last):
  File "C:/Path/To/GeoCoder.py", line 9, in <module>
    DATA.googleaddress, (DATA.latitude, DATA.longitude) = geolocator.geocode(DATA.address)
TypeError: 'NoneType' object is not iterable

这个错误是什么意思,我该如何解决?

【问题讨论】:

你验证过DATA数据框有数据吗? 是的,确实好几次 :) 【参考方案1】:

因为geolocator.geocode 每次需要一个参数,而不是列表(或数组)。

你可以试试:

locs = [ geolocator.geocode(addr) for addr in DATA.address ]
geo_info = pandas.DataFrame(
    [ (addr.address, addr.latitude, addr.longitude) for addr in locs ],
    columns=['googleaddress', 'latitude', 'longitude'])

您所要做的就是合并这些 DataFrame:

DATA.combine_first(geo_info)

请注意,bad form 在 python 中具有全大写变量。

【讨论】:

好吧,那做了点什么!谢谢,但现在我收到一个错误:“解包的变量太多”......猜测是因为我传递了太多地址?但现在只有 27 岁... 不,这是因为您有一个包含 27 个 Location 实例的列表,您正在尝试将 unpack 分配给 2 个元素(其中一个是一个元组)。我会更新答案。 做到了!非常感谢。

以上是关于将地理位置数据添加到 Pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 数据框中查找唯一值,无论行或列位置如何

如何按位置对 Pandas 数据框进行切片?

R将元素添加到特定位置的数据框中

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

从增加的位置迭代 Pandas 数据框的所有列后,如何再次返回第一列?

将缺失的日期添加到 pandas 数据框