Как получить несколько JSON строк для рендеринга в виде фрейма данных с python? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь получить данные audio_feature в список песен Spotify , используя их API . Получив токен API, я сделаю запрос на API следующего кода

    header2 ={
    'Authorization':'Bearer '+token.json()['access_token']    
}
param2 = {
    'ids' : '7C5UlMz9b51rQI66lpEiSo,6ocbgoVGwYJhOv1GgI9NsF,22vgEDb5hykfaTwLuskFGD'

}
response = requests.get(endpoint,headers=header2,params=param2)
response.status_code
response.json()

, который дает мне этот ответ

{'audio_features': [{'danceability': 0.297,
   'energy': 0.827,
   'key': 5,
   'loudness': -4.748,
   'mode': 1,
   'speechiness': 0.0735,
   'acousticness': 0.12,
   'instrumentalness': 0.000123,
   'liveness': 0.347,
   'valence': 0.467,
   'tempo': 147.232,
   'type': 'audio_features',
   'id': '7C5UlMz9b51rQI66lpEiSo',
   'uri': 'spotify:track:7C5UlMz9b51rQI66lpEiSo',
   'track_href': 'https://api.spotify.com/v1/tracks/7C5UlMz9b51rQI66lpEiSo',
   'analysis_url': 'https://api.spotify.com/v1/audio-analysis/7C5UlMz9b51rQI66lpEiSo',
   'duration_ms': 221773,
   'time_signature': 4},
  {'danceability': 0.778,
   'energy': 0.317,
   'key': 1,
   'loudness': -10.732,
   'mode': 0,
   'speechiness': 0.334,
   'acousticness': 0.592,
   'instrumentalness': 0,
   'liveness': 0.0881,
   'valence': 0.327,
   'tempo': 140.048,
   'type': 'audio_features',
   'id': '6ocbgoVGwYJhOv1GgI9NsF',
   'uri': 'spotify:track:6ocbgoVGwYJhOv1GgI9NsF',
   'track_href': 'https://api.spotify.com/v1/tracks/6ocbgoVGwYJhOv1GgI9NsF',
   'analysis_url': 'https://api.spotify.com/v1/audio-analysis/6ocbgoVGwYJhOv1GgI9NsF',
   'duration_ms': 178627,
   'time_signature': 4},
  {'danceability': 0.842,
   'energy': 0.734,
   'key': 1,
   'loudness': -5.065,
   'mode': 0,
   'speechiness': 0.0588,
   'acousticness': 0.0427,
   'instrumentalness': 0,
   'liveness': 0.106,
   'valence': 0.952,
   'tempo': 137.958,
   'type': 'audio_features',
   'id': '22vgEDb5hykfaTwLuskFGD',
   'uri': 'spotify:track:22vgEDb5hykfaTwLuskFGD',
   'track_href': 'https://api.spotify.com/v1/tracks/22vgEDb5hykfaTwLuskFGD',
   'analysis_url': 'https://api.spotify.com/v1/audio-analysis/22vgEDb5hykfaTwLuskFGD',
   'duration_ms': 181027,
   'time_signature': 4}]}

Теперь я действительно хочу преобразовать эти три JSON записи в таблицу со столбцами, которые в настоящее время присутствуют в качестве меток для каждой дорожки. Как мне создать такую ​​таблицу?

Я столкнулся с ошибками при использовании json .dumps () и получаю строки только для каждой записи JSON, когда использую следующее:

df = pd.DataFrame(data=response.json(),)
print(df)

1 Ответ

0 голосов
/ 22 февраля 2020

Вы можете сделать это с pandas прямо из коробки, используя json_normalize.

from pandas.io.json import json_normalize

json_normalize(data, record_path='audio_features')

   acousticness                                       analysis_url  ...                                   uri  valence
0        0.1200  https://api.spotify.com/v1/audio-analysis/7C5U...  ...  spotify:track:7C5UlMz9b51rQI66lpEiSo    0.467
1        0.5920  https://api.spotify.com/v1/audio-analysis/6ocb...  ...  spotify:track:6ocbgoVGwYJhOv1GgI9NsF    0.327
2        0.0427  https://api.spotify.com/v1/audio-analysis/22vg...  ...  spotify:track:22vgEDb5hykfaTwLuskFGD    0.952

В pandas>=1.0.0 это просто from pandas import json_normalize

...