我制作了一个函数,可以从坐标中提取名称和地址,并生成一个数据框。它适用于单个条目。
def get_data(lat, lng):
try:
date = '2019-03-09'
res = requests.get('https://www.imax.com/showtimes/ajax/theatres?date=' + date + '&lat=' + str(lat) + '&lon=' + str(lng))
soup = bs(res.content, 'lxml')
newData = json.loads(soup.select_one('p').text)
columns = ['theatreLink', 'theatrename', 'address']
baseURL = 'https://www.imax.com'
results = []
for row in newData['rows']:
soup = bs(row['row'], 'lxml')
link = baseURL + soup.select_one('a')['href']
name = soup.select_one('.theatre-title').text.strip()
address = soup.select_one('.theatre-address').text.strip()
results.append([link, name, address])
df = pd.DataFrame(results, columns = columns)
return df
except:
print (error)
get_data(us['lat'][2], us['lng'][2])
结果是:
我正在尝试使用for循环,该循环可以提供多个坐标并生成放入一个数据帧中的结果。例如,继续将每个坐标的结果附加到上一个数据框。
我尝试了以下代码:
for i in range(len(us)):
lat=us['lat']
lng=us['lng']
df.append(get_data(lat[i], lng[i]))
df_all.append(df)
但这给了我以下错误:
答案 0 :(得分:0)
您应该执行以下操作。
result = []
lat=us['lat']
lng = us['ing']
for i in range(len(us)):
result.append(get_data(lat[i], ing[i]))
pd.DataFrame(result, columns =columns )
在我的示例中,必须更改get_data以返回列表而不是DF。
答案 1 :(得分:0)
考虑从列表理解中构建数据帧列表,然后将所有元素连接在一起。下面假设我们是具有两个迭代等效项的数据框:
df_list = [get_data(row['lat'], row['lng']) for idx,row in us.iterrows()]
# df_list = [get_data(row.lat, row.lng) for row in us.itertuples()]
final_df = pd.concat(df_list, ignore_index=True)