You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于嵌套乐器列表创建布尔型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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:45:32