Pandas: 将格式选项传递给函数
Pandas: Passing format options into functions
我想从邮政编码中提取坐标作为新的 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
?我想答案很简单,但我试过都没有用!
如果您要以这种方式始终如一地使用此函数,则可以执行类似的操作,或者您编写代码检查以查看您的字符串是否以“%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
我想从邮政编码中提取坐标作为新的 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
?我想答案很简单,但我试过都没有用!
如果您要以这种方式始终如一地使用此函数,则可以执行类似的操作,或者您编写代码检查以查看您的字符串是否以“%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