基于Python的Spotify API多流派分类:主流派提取与高效映射
高效映射Spotify子流派到主流派的Python实现
你当前通过多次loc赋值的方式映射子流派到主流派,不仅代码冗余,数据量大时效率也偏低。更高效的方案是使用字典映射,利用字典O(1)的查找特性,一次性完成映射操作。
优化步骤:
定义子流派到主流派的映射字典
把所有需要映射的规则集中在一个字典里,后续维护只需修改这个字典:genre_mapping = { 'doo-wop': 'R&B', 'blues': 'Blues', 'jazz organ': 'Jazz', 'rock-and-roll': 'Rock', 'adult standards': 'Pop' # 新增映射直接在这里添加键值对即可 }生成「Main Genre」列
有两种常用方式,根据需求选择:- 方式1:
map方法(未匹配的子流派会返回NaN,适合需要明确识别未匹配项的场景)fifties_df['Main Genre'] = fifties_df['Sub Category'].map(genre_mapping) - 方式2:
replace方法(未匹配的子流派会保留原内容,适合希望未匹配项不变的场景)fifties_df['Main Genre'] = fifties_df['Sub Category'].replace(genre_mapping)
- 方式1:
进阶优化:合并提取与映射(可选)
如果不需要保留「Sub Category」列,可以直接从「Genres」列提取首个流派并完成映射,减少中间步骤:
def get_main_genre(genre_str): first_sub_genre = genre_str.split(',')[0].strip() # 未匹配的子流派返回自定义值(比如'Other'),避免出现NaN return genre_mapping.get(first_sub_genre, 'Other') fifties_df['Main Genre'] = fifties_df['Genres'].apply(get_main_genre)
为什么这个方案更高效?
多次loc赋值会重复遍历DataFrame,时间复杂度随映射规则数量线性增加;而字典映射只需一次遍历DataFrame,查找操作是常数时间,代码更简洁,维护成本更低。
内容的提问来源于stack exchange,提问作者Joshua Buchholtz
相关产品推荐
相关产品推荐

