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

编写函数处理欧视大赛获奖歌曲数据:将单行数据转换为歌曲词与对应分数的二维元组列表

解决欧视大赛歌曲数据拆分与元组生成问题

你的核心需求是把每首歌曲名称拆分成单个单词,让每个单词和对应歌曲的分数组成元组,最终生成新的DataFrame。你当前的代码问题在于没有针对传入的row进行操作,而是直接遍历了整个ev['Song']列,同时错误地引用了整个Points列,导致无法关联当前行的分数。

修正后的解决方案

我们可以通过以下步骤实现需求:

1. 编写正确的行处理函数

这个函数会接收单行数据,拆分歌曲名并生成对应的元组列表:

import pandas as pd

def tuple_generator(row):
    # 拆分歌曲名为单词(可根据需求调整拆分逻辑,比如处理标点、大小写)
    # 这里用split()默认按空格拆分,若需要提取纯单词可改用正则:re.findall(r'\w+', row['Song'])
    words = row['Song'].strip().split()
    # 获取当前行的分数
    current_points = row['Points']
    # 生成每个单词与分数的元组
    return [(word, current_points) for word in words]

2. 应用函数到整个数据集并生成新DataFrame

通过apply按行处理原DataFrame,再把所有元组列表展开成一个大列表,最后转换为新的DataFrame:

# 假设原数据集是名为ev的DataFrame,包含'Song'和'Points'列
# 按行应用函数,得到每个行对应的元组列表Series
row_tuples = ev.apply(tuple_generator, axis=1)

# 展开嵌套的列表,得到所有元组的扁平化列表
all_tuples = [tuple_item for sublist in row_tuples for tuple_item in sublist]

# 生成新的DataFrame,指定列名
new_df = pd.DataFrame(all_tuples, columns=['Word', 'Points'])

验证示例

比如你的输入行是:

SongPoints
Net als toen31

调用tuple_generator(ev.iloc[0])会返回:
[('Net', 31), ('als', 31), ('toen', 31)],完全符合你的期望。

可选优化

如果歌曲名包含标点(比如逗号、感叹号),可以用正则表达式提取纯单词,避免把标点包含进去:

import re

def tuple_generator(row):
    # 提取所有字母数字组成的单词
    words = re.findall(r'\w+', row['Song'])
    current_points = row['Points']
    return [(word, current_points) for word in words]

内容的提问来源于stack exchange,提问作者help me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:23:07