如何在数据框的行上进行迭代

时间:2018-12-01 18:47:12

标签: python pandas spotify spotipy

我正在创建一个脚本,该脚本采用艺术家的数据帧,将其传递给Spotify API并返回一些额外的信息。我正在努力如何最好地将艺术家的数据帧迭代传递给调用Spotify的函数。

我有两个功能:

artists = grabArtists()

返回艺术家列表,例如:

0                                      Gas
1                                   System
3                       Finlay Shakespeare
4                         Boards Of Canada
6    Delia Derbyshire Appreciation Society

然后我有功能来获取Spotify艺术家数据...

def grabSpotifyData(searchQ):

# ERASE CACHE AND PROMPT FOR USER PERMISSION
client_credentials_manager = SpotifyClientCredentials()
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

# SEARCH FOR AN ARTIST
searchQuery = searchQ
search = sp.search(searchQuery, 1, 0, "artist")

artist = search['artists']['items'][0]

genres = artist['genres']
image = artist['images'][0]['url']
pop = artist['popularity']
followers = artist['followers']['total']

return genres, image, pop, followers

我可以使用以下方法非常简单地获取单个结果的数据框。我该如何进行迭代,以使其遍历艺术家列表并附加有关艺术家的上下文?

artists = grabArtists()[0]
result = grabSpotifyData(artists)
df = pd.DataFrame([(artists), (result[0]), (result[1]), (result[2]), 
(result[3])])
df = df.T

它应该返回一个数据框,其中的列为:艺术家,流派,图像,受欢迎程度,关注者。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您可以将艺术家作为列表反复传递给api:

df = []
for artist in artists:
    result = grabSpotifyData(artist)
    d0 = pd.DataFrame([(artists), (result[0]), (result[1]), (result[2], (result[3])])
    df.append(d0)

df = pd.concat(df, axis=1)

答案 1 :(得分:0)

df = pd.DataFrame()

for artist in artists:
    try:
        results = grabSpotifyData(artist)
    except IndexError:
        pass
    df = df.append(results)

df = pd.DataFrame(df)
df = df.reset_index()
相关问题