使用 Panda 的 Apply 函数循环遍历 Google 中的坐标列表 (csv) Places API query with Python

Using Panda's Apply Function to loop through List of Coordinates (csv) in Google Places API query with Python

对于一个项目,我有一个包含 60 个坐标和半径(针对市区的每个质心)的 csv 文件,我想获得我的 Google 地图结果。目的是遍历坐标和半径,并为每个列出的坐标接收一种特定类型(例如咖啡馆)的所有现有地点。到目前为止,我能够通过手动添加坐标来检索结果,并且我正在努力将 pandas 'apply' 应用于我的 'givePlaces'-函数。

我使用 pandas 导入 csv 文件并编写了一个函数 returns 我最大。可能的结果(<60,Google 不允许更多)。我定义了变量“位置”、“半径”和“类型”。该代码如下所示并且几乎可以工作。也许你们中的一位可以提供帮助:

import googlemaps
import pprint
import time
import csv
import pandas as pd
from GoogleMapsAPIKey import get_my_key 

#import the coordinates and radius csv-file
df = pd.read_csv('filepath',sep=';',header=0)
df

经过简化,csv-table 如下所示:

Latitude Longitude Radius
48.179037 11.522759 500
48.156327 11.414132 1200
#define my API Key
API_KEY = get_my_key()
gmaps = googlemaps.Client(key = API_KEY)

#Define a function that returns the Places API results:
def givePlaces(location, radius, type):
    # define list of places of interest
    places = []
    # request first page
    places_result = gmaps.places_nearby(location=location, radius=radius, type=type)
    # add results to places
    places = places + places_result['results']
    # while 'next_page_token' exists, request the next page and repeat
    while('next_page_token' in places_result):
        # wait 3 seconds before next request
        time.sleep(3)
        # overwrite places_result with results of second and/or third page
        places_result = gmaps.places_nearby(page_token = places_result['next_page_token'])
        # add these results to places
        places = places + places_result['results']
    print("found " + str(len(places)) + " places")
    return places

#Previously I used this manually:
location = 48.179037,11.522759
radius = 500
type = 'cafe'
my_places = givePlaces(location, radius, type)

#the apply function would look like this, but so far does not work:
df['places'] = df.apply(lambda row: givePlaces((row['Länge'], row['Breite'], row['Radius'], 'cafe'), axis=1)

pprint.pprint(my_places)

任何人都可以帮助我使用 pandas 应用功能吗?我在编码方面仍然是一个初学者,Google 对我的具体问题没有太大帮助。非常感谢您!

3 件事:

  • 不要命名变量 type,因为它也是一个内置变量 python function
  • df.apply(lambda row: givePlaces((row['Länge'], row['Breite'], row['Radius'], 'cafe'), axis=1) 格式不正确,缺少括号,您需要将 location 作为字符串、字典、列表或元组传递。
  • 位置需要指定为latitude (Breite),longitude (Länge)

使用元组可以:

df.apply(lambda row: givePlaces((row['Breite'], row['Länge']), row['Radius'], 'cafe'), axis=1)