【问题标题】:Pandas: Passing format options into functionsPandas:将格式选项传递给函数
【发布时间】:2017-05-11 12:06:06
【问题描述】:

我想从邮政编码中提取坐标作为新的 df 列。

geopy 模块的功能是:

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode('%s tn6 3rn')

print((location.latitude, location.longitude))
(51.0459837, 0.2192646)

我将其应用于单个值的函数有效:

def pcodeToCoor(x):
    geolocator = Nominatim()
    location = geolocator.geocode(x)
    return ((location.latitude, location.longitude))

pcodeToCoor('%s tn6 3rn')
(51.0459837, 0.2192646)

但是当将函数传递给测试df时:

    name    postcode
0   jd      tn6 3rn
1   hf      en6 1dg
2   ss      sw17 0ju

df['coordinate'] = df['postcode'].map(pcodeToCoor)

我收到AttributeError: 'NoneType' object has no attribute 'latitude。请注意,我可以通过从基本 api 功能中删除 %s 来重新创建此错误。

问题是,我如何在我的函数中使用%s?我想答案很简单,但我没有尝试过!

【问题讨论】:

    标签: python pandas geopy


    【解决方案1】:

    如果您打算以这种方式始终使用此函数,您可以执行类似的操作,或者您编写代码检查以查看您的字符串是否以“%s”开头。

    def pcodeToCoor(x):
        geolocator = Nominatim()
        location = geolocator.geocode('%s '+x)
        return ((location.latitude, location.longitude))
    

    编辑:

    def pcodeToCoor(x):
        if x[0:2] != '%s':
            x = '%s ' + x 
        geolocator = Nominatim()
        location = geolocator.geocode(x)
        return ((location.latitude, location.longitude))
    

    测试:

    pcodeToCoor('%s tn6 3rn')
    

    输出:

    (51.0459837, 0.2192646)
    

    测试 2:

    df['postcode'].map(pcodeToCoor)
    

    输出:

    0     (51.0459837, 0.2192646)
    1    (51.7206134, -0.2042041)
    2    (51.3866947, -0.1800573)
    Name: postcode, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 2013-02-05
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2022-12-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多