首页 > 解决方案 > 从较小 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 

标签: pythonpandasloopsdataframeappend

解决方案


如果这是不好的形式或违反礼仪,我深表歉意,但我解决了我的问题并认为我应该发布。也许努力说明 StackOverflow 的问题帮助我解决了它?

首先,我学会了如何忽略空 DataFrame:

dfven = nearby_venues.loc[nearby_venues['categories'] == 'Coffee Shop']

if dfven.empty == False :

添加此代码后,我的打印输出是一系列格式相同的干净数据帧,因此很容易将它们附加到一个数据帧中。我在代码的开头创建了一个数据框 (merge = pd.DataFrame()),然后在我打印的地方添加了这一行。

merge = merge.append(dfven)

现在我的输出很完美。


推荐阅读