我有一个包含以下列的DataFrame:
link sqft rent bedroom address1 address2 address3 bathroom我有一个函数,它以3个地址作为输入,然后将纬度和经度作为dict返回。
当我像这样应用这个函数时..。
df['lat'] = return_coordinates(df.address1,df.address2,df.addresse3).get('Latitude')..。lat列包含相同的值。
以下是功能:
import herepy
geocoderApi = herepy.GeocoderApi('ap_key')
def return_coordinates(address1,address2,address3):
response = geocoderApi.free_form('{},{},{}'.format(address1,address2,address3))
geocode = response.as_dict()
geocode = geocode.get('Response')
geocode = geocode.get('View')
value = (geocode[0].get('Result')[0].get('Location').get('DisplayPosition'))
return value发布于 2020-02-10 12:17:37
下面是一个使用DataFrame.apply()函数的解决方案。文件可以在这里找到。
由于缺乏数据和API访问权限,我伪造了您的数据集( dataset ),尽管效果很差。但这说明了如何使用apply()函数从函数的返回值填充lat列。
基本设置(黑客攻击):
import pandas as pd
data = {'link': ['www.abc.com/1', 'www.abc.com/2', 'www.abc.com/3'],
'sqft': [1111, 2222, 3333],
'rent': ['$1111', '$2222', '$3333'],
'bedroom': [1, 2, 3],
'address1': [[34.052235, -118.243683], [33.052235, -117.243683], [32.052235, -115.243683]],
'address2': [[32.715736, -117.161087], [31.715736, -116.161087], [30.715736, -115.161087]],
'address3': [[33.541679, -117.777214], [32.541679, -116.777214], [31.541679, -115.777214]],
'bathroom': [1, 2, 3]}
# Create dataset
df = pd.DataFrame(data)
def return_coordinates(address1, address2, address3):
"""Return the first value of the ``address1`` parameter."""
return address1[0]使用apply函数:
这将广播return_coordinates函数返回到DataFrame的lat列。
df['lat'] = df.apply(lambda x: return_coordinates(x['address1'], x['address2'], x['address3']), axis=1)原始数据集:
address1 address2 address3 bathroom bedroom link rent sqft
0 [34.052235, -118.243683] [32.715736, -117.161087] [33.541679, -117.777214] 1 1 www.abc.com/1 $1111 1111
1 [33.052235, -117.243683] [31.715736, -116.161087] [32.541679, -116.777214] 2 2 www.abc.com/2 $2222 2222
2 [32.052235, -115.243683] [30.715736, -115.161087] [31.541679, -115.777214] 3 3 www.abc.com/3 $3333 3333使用新的lat列:
address1 ... lat
0 [34.052235, -118.243683] ... 34.052235
1 [33.052235, -117.243683] ... 33.052235
2 [32.052235, -115.243683] ... 32.052235正如您在结果中看到的那样,apply函数为每一行返回address1字段的第一个值。
发布于 2020-02-10 09:22:33
你的代码应该能用。以下是您正在寻找的东西的示例,以防万一:
df = pd.DataFrame({'address1': [1, 2, 3], 'address2': [4, 5, 6], 'address3': [7, 8, 9]})
def return_coordinates(a,b,c):
d = {
"Latitude": a+b+c,
"Longitude": a*b*c
}
return d
df['lat'] = return_coordinates(df['address1'], df['address2'], df['address3']).get("Latitude")
df['lng'] = return_coordinates(df['address1'], df['address2'], df['address3']).get("Longitude")
print(df)产出:
address1 address2 address3 lat lng
0 1 4 7 12 28
1 2 5 8 15 80
2 3 6 9 18 162https://stackoverflow.com/questions/60147008
复制相似问题