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

如何用Pandas将ASCAP CSV中同歌曲的多行数据合并为单行?

用Pandas处理ASCAP多行CSV转单行的解决方案

看起来你已经走对了第一步——通过groupby('TITLE')把同一首歌的行归到了一起,接下来只需要在每个分组里提取对应信息,整合成单行就可以了。下面是完整的实现代码,以及分步解释:

完整代码

import pandas as pd

# 读取大体积CSV文件,low_memory=False避免类型推断警告
data = pd.read_csv("COMMA_ASCAP_TEXT.txt", low_memory=False)

# 初始化空列表存储整理后的单行数据
processed_data = []

# 遍历每个歌曲分组
for song_title, group in data.groupby('TITLE'):
    # 提取ASCAP份额行的SHARES和NOTE值
    share_info = group[group['ROLE_TYPE'] == 'ASCAP'].iloc[0]
    shares_value = share_info['SHARES']
    note_value = share_info['NOTE']
    
    # 收集所有作者(ROLE_TYPE=W),去重后用逗号分隔
    writers = ', '.join(group[group['ROLE_TYPE'] == 'W']['NAME'].dropna().unique())
    # 收集所有表演者(ROLE_TYPE=P),同理处理
    performers = ', '.join(group[group['ROLE_TYPE'] == 'P']['NAME'].dropna().unique())
    
    # 将当前歌曲的整理信息添加到结果列表
    processed_data.append({
        'TITLE': song_title,
        'WRITER': writers,
        'PERFORMER': performers,
        'SHARES': shares_value,
        'NOTE': note_value
    })

# 转换为DataFrame并保存为新的CSV
final_df = pd.DataFrame(processed_data)
final_df.to_csv("formatted_ascap_songs.csv", index=False)

关键步骤解释

  1. 读取大文件:使用low_memory=False是因为你的CSV文件体积大,Pandas默认的类型推断可能会抛出警告,这个参数可以避免这类问题。
  2. 提取份额数据:每个分组里ROLE_TYPE为ASCAP的行就是你需要的份额行,用iloc[0]直接取第一行(每个歌曲只会有一行ASCAP份额记录)。
  3. 整理作者/表演者:
    • 筛选对应角色的行,提取NAME列
    • dropna()处理空值,unique()去重(避免同一作者/表演者重复出现)
    • 用, 拼接成字符串,这样多个作者/表演者会以逗号分隔,符合CSV的可读性要求
  4. 保存结果:最后把整理好的列表转成DataFrame,用to_csv保存时加上index=False,避免生成不必要的索引列。

边界情况处理

  • 如果某首歌没有表演者(没有ROLE_TYPE=P的行),PERFORMER列会显示为空字符串,不会影响CSV格式
  • 如果同一首歌有多个作者/表演者,会自动拼接成逗号分隔的字符串,保持数据的完整性

内容的提问来源于stack exchange,提问作者Zach Cutshall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:16:33