基于嵌套乐器列表创建布尔型Pandas DataFrame
解决方案:从乐器-歌曲列表生成布尔型Pandas DataFrame
步骤1:准备并清理原始数据
先把原始数据赋值给变量,过滤掉每个乐器列表里的None值,得到干净的(歌曲名,乐器列表)配对:
import pandas as pd # 原始数据 data = [(['Piano'], 'Beethoven - opus22 4.mid'), (['Piano'], 'Borodin - ps7.mid'), (['Piano'], 'Chopin - op18.mid'), ([None, 'Guitar', 'StringInstrument', 'Acoustic Bass'], 'Cyndi Lauper - True Colors.mid'), (['Piano', 'Fretless Bass', 'StringInstrument', None], 'Frank Mills - Musicbox Dancer.mid'), (['Piano', 'Acoustic Bass', None, 'Baritone Saxophone'], 'George Benson - On Broadway.mid'), (['Piano'], 'Grieg - Voeglein.mid'), (['Piano'], 'Mozart - 333 3.mid'), ([None, 'Pan Flute', 'Piano', 'Piccolo', 'Violin'], 'The Corrs - Dreams.mid'), (['Piano', None, 'Fretless Bass'], 'ABBA - Money Money Money.mid')] # 清理数据:移除乐器列表中的None值 cleaned_pairs = [(song, [inst for inst in inst_list if inst is not None]) for inst_list, song in data]
步骤2:提取所有唯一乐器作为列名
收集所有出现过的乐器,去重后排序,作为DataFrame的列:
# 获取所有唯一乐器并排序 all_instruments = sorted({inst for _, insts in cleaned_pairs for inst in insts})
步骤3:构建布尔值数据集并创建DataFrame
为每个歌曲生成对应所有乐器的布尔值(存在为True,不存在为False),再用这些数据创建DataFrame,把歌曲名设为行索引:
# 生成每个歌曲的布尔值字典列表 df_rows = [] song_names = [] for song, insts in cleaned_pairs: song_names.append(song) # 为当前歌曲生成所有乐器的布尔值 row_dict = {inst: inst in insts for inst in all_instruments} df_rows.append(row_dict) # 创建目标DataFrame result_df = pd.DataFrame(df_rows, index=song_names)
最终效果
运行后得到的result_df就是目标结构:
- 行是各个歌曲名称
- 列是所有出现过的乐器
- 单元格值为
True表示该歌曲使用了对应乐器,False则未使用
比如查看部分结果:
print(result_df.head())
输出示例:
Acoustic Bass Baritone Saxophone Fretless Bass Guitar Pan Flute Piano Piccolo StringInstrument Violin Beethoven - opus22 4.mid False False False False False True False False False Borodin - ps7.mid False False False False False True False False False Chopin - op18.mid False False False False False True False False False Cyndi Lauper - True Colors.mid True False False True False False False True False Frank Mills - Musicbox Dancer.mid False False True False False True False True False
内容的提问来源于stack exchange,提问作者Willem van der Hoeven
相关产品推荐
相关产品推荐

