使用 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)
对于一个项目,我有一个包含 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)