如何从邮政编码中获取坐标,然后使用循环将其添加到df中

时间:2018-09-21 20:01:40

标签: python pandas loops coordinates

我有以下数据框:

d = {'Postcode': ['M3A','M4A','M5A','M6A','M9A','M1B'], 'Borough': ['North York', 'Downtown Toronto', 'Etobicoke', 
                                                                    'Scarborough', 'East York', 'York'], 
     'Neighbourhood': ['Parkwoods', 'Victoria Village', 'Harbourfront', 'Regent Park',
       'Lawrence Heights', 'Lawrence Manor']}
post_df = pd.DataFrame(data = d)

会产生类似以下内容的

    Postcode    Borough             Neighbourhood
0   M3A         North York          Parkwoods
1   M4A         Downtown Toronto    Victoria Village
2   M5A         Etobicoke           Harbourfront
3   M6A         Scarborough         Regent Park
4   M9A         East York           Lawrence Heights
5   M1B         York                Lawrence Manor

我想获取每个邮政编码的所有纬度和经度。 我想出了这样的代码:

import geocoder

# initialize your variable to None
lat_lng_coords = None

# loop until you get the coordinates
while(lat_lng_coords is None):
  g = geocoder.google('{}, Toronto, Ontario'.format(postal_code_from_df))
  lat_lng_coords = g.latlng

latitude = lat_lng_coords[0]
longitude = lat_lng_coords[1]

现在我的问题是:使用前面的代码,我想获取每个邮政编码的每个纬度和经度,并将它们添加到此现有df中称为“纬度”和“经度”的2个新列中。我如何使用一个循环来避免搜索邮政编码的每个坐标?

非常感谢您

2 个答案:

答案 0 :(得分:1)

您好,您需要定义地址解析器功能并将其循环到df上。我正在函数中一一传递您的邮政编码列,并从地址解析器获取值,并将其分配并存储到纬度和经度两个新列中。见下文:

value = np.arange(len(yp))  # what to repeat
repeat_count = len(yp)      # how many times
repeated = tf.stack ([value for i in range(repeat_count)], axis=1)

这应该对您有用。

答案 1 :(得分:1)

您可以使用df.apply。像这样:

post_df['Latitude'], post_df['Longitude'] = zip(*post_df['Postcode'].apply(get_geocoder))

如{Ankur所述,get_geocoder的定义位置