我正在遍历103个FourSquare URL的列表,以查找“咖啡店”。
我可以为每个URL创建一个DataFrame并在遍历列表时打印每个DataFrame(底部示例输出)。
在遍历列表时,我无法弄清楚如何将每个URL的DataFrame附加到单个DataFrame中。我的目标是从要打印的数据帧中编译单个数据帧。
x = 0
while x < 103 :
results = requests.get(URLs[x]).json()
def get_category_type(row):
try:
categories_list = row['categories']
except:
categories_list = row['venue.categories']
if len(categories_list) == 0:
return None
else:
return categories_list[0]['name']
venues = results['response']['groups'][0]['items']
nearby_venues = json_normalize(venues) # flatten JSON
# filter columns
filtered_columns = ['venue.name', 'venue.categories', 'venue.location.lat', 'venue.location.lng']
nearby_venues =nearby_venues.loc[:, filtered_columns]
# filter the category for each row
nearby_venues['venue.categories'] = nearby_venues.apply(get_category_type, axis=1)
# clean columns
nearby_venues.columns = [col.split(".")[-1] for col in nearby_venues.columns]
dfven = nearby_venues.loc[nearby_venues['categories'] == 'Coffee Shop']
print(x, '!!!', dfven, '\n')
x = x + 1
以下是一些输出(我确实获得了完整的结果):
0 !!! name categories lat lng
5 Tim Hortons Coffee Shop 43.80200 -79.198169
8 Tim Hortons / Esso Coffee Shop 43.80166 -79.199133
1 !!! Empty DataFrame
Columns: [name, categories, lat, lng]
Index: []
2 !!! name categories lat lng
5 Starbucks Coffee Shop 43.770367 -79.186313
18 Tim Hortons Coffee Shop 43.769591 -79.187081
3 !!! name categories lat lng
0 Starbucks Coffee Shop 43.770037 -79.221156
4 Country Style Coffee Shop 43.773716 -79.207027
答案 0 :(得分:0)
如果这是不正确的形式或违反礼节,我深表歉意,但我解决了我的问题,并认为应该发表。也许努力说明StackOverflow的问题可以帮助我解决问题?
首先,我学习了如何忽略空的DataFrame:
dfven = nearby_venues.loc[nearby_venues['categories'] == 'Coffee Shop']
if dfven.empty == False :
一旦我添加了此代码,我的打印输出就是一系列相同格式的数据帧,因此将它们附加到一个数据帧中很容易。我在代码的开头(merge = pd.DataFrame())创建了一个数据框,然后在我正在打印的那一行中添加了这一行。
merge = merge.append(dfven)
现在我的输出是完美的。