如何使用pandas.json_normalize处理Spotify API返回的嵌套JSON艺术家列表,实现单条曲目记录对应多个艺术家名称?
解决Spotify API数据提取:合并艺术家名称到Pandas列中
我来帮你搞定这个问题!你想要把Spotify API返回的每首曲目对应的所有艺术家名称合并成逗号分隔的字符串,放到Pandas的Artists列里,之前用json_normalize要么没提取到正确内容,要么把每个艺术家拆成了单独行,对吧?下面是两种简单有效的解决方案:
方法一:先标准化数据,再处理嵌套列
首先用json_normalize把原始的曲目数据转换成基础DataFrame,然后针对artists列(此时是字典列表格式)做自定义处理,提取每个艺术家的name并合并:
import pandas as pd # 假设你已经获取到RespJson2['items']的曲目数据 df = pd.json_normalize(RespJson2['items']) # 处理artists列:遍历每个艺术家字典,提取name并用逗号连接 df['Artists'] = df['artists'].apply(lambda x: ','.join([artist['name'] for artist in x])) # 如果你不需要原始的artists列,可以删除它 df = df.drop('artists', axis=1) # 查看你需要的Artists列结果 print(df[['Artists']])
方法二:先预处理数据,再转成DataFrame
如果不想保留曲目的其他字段,只需要艺术家名称,可以先遍历原始的曲目列表,提前合并好艺术家名称,再转成DataFrame:
import pandas as pd # 预处理每一条曲目数据,生成包含合并后艺术家名称的字典 processed_tracks = [] for track in RespJson2['items']: # 提取当前曲目的所有艺术家名称并合并 artist_names = ','.join([artist['name'] for artist in track['artists']]) processed_tracks.append({'Artists': artist_names}) # 转成DataFrame df = pd.DataFrame(processed_tracks) print(df)
为什么之前的方法没达到预期?
- 直接用
pd.json_normalize(RespJson2['items'])时,artists列会被保留为字典列表的格式,不会自动提取合并名称; - 使用
record_path=["artists"]参数时,json_normalize会把每个艺术家拆分成单独的行,这就导致同一首曲目被拆成了多条记录,不符合你的需求。
内容的提问来源于stack exchange,提问作者Pola George
相关产品推荐
相关产品推荐

