python - 从较小 DataFrame 的循环序列中编译一个 DataFrame
问题描述
我正在遍历 103 个 FourSquare URL 的列表以查找“咖啡店”。
我可以为每个 URL 创建一个 DataFrame 并在循环遍历列表时打印每个 DataFrame(底部的示例输出)。
当我遍历列表时,我无法弄清楚如何将每个 URL 的 DataFrame 附加到单个 DataFrame 中。我的目标是从我正在打印的 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
解决方案
如果这是不好的形式或违反礼仪,我深表歉意,但我解决了我的问题并认为我应该发布。也许努力说明 StackOverflow 的问题帮助我解决了它?
首先,我学会了如何忽略空 DataFrame:
dfven = nearby_venues.loc[nearby_venues['categories'] == 'Coffee Shop']
if dfven.empty == False :
添加此代码后,我的打印输出是一系列格式相同的干净数据帧,因此很容易将它们附加到一个数据帧中。我在代码的开头创建了一个数据框 (merge = pd.DataFrame()),然后在我打印的地方添加了这一行。
merge = merge.append(dfven)
现在我的输出很完美。
推荐阅读
- css - 根据兄弟悬停更改兄弟样式
- c - 即使经过 6 小时的编程,我也看不到程序输出的问题
- mysql - mysql 存储过程 2 IN Param 来自 SELECT
- amazon-web-services - 可以通过 API 网关 GET 但不能 POST 到 Lambda。为什么?
- python - Flaskserver 运行但没有路由?
- c# - 使用 protobuf-net 时如何处理 System.OutOfMemoryException?
- angular - 占位符在升级到角材料 6.4.7 后透明
- javascript - 循环中的执行顺序
- specflow - 通过 SpecFlow 在测试执行期间截取屏幕截图并终止应用程序以防冻结
- c# - C# WPF Gui 复选框名称为数组