【问题标题】:How do I get multiple JSON strings to render as a dataframe with python?如何使用 python 获取多个 JSON 字符串以呈现为数据框?
【发布时间】:2020-02-22 00:07:28
【问题描述】:

我正在尝试获取 Spotify 歌曲列表 using their API 上的 audio_feature 数据。获得我的 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) 尝试放置列表 `response.json()['audio_features'] 而不是完整的字典。 2)您可能想给出错误日志,以便我们可以在“json”3中找到错误。

标签: python json api response spotify


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2016-05-21
    • 2022-01-05
    • 2015-12-21
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多