从较小的DataFrame的循环序列中编译一个DataFrame

时间:2019-01-12 18:10:26

标签: python pandas loops dataframe append

我正在遍历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 

1 个答案:

答案 0 :(得分:0)

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

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

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

if dfven.empty == False :

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

merge = merge.append(dfven)

现在我的输出是完美的。