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

如何使用pandas apply方法将DataFrame转为合并二维元组列表及解决报错

报错根因

按行执行apply(axis=1)时,自定义函数接收到的单行数据中,row['Score']是单个浮点数标量,并非数组或Series结构,原代码强行调用.tolist()方法就会触发'float' object has no attribute 'tolist'报错。
原自定义函数存在大量冗余设计:没必要额外构造临时列表、没必要借助itertools.cycle循环生成重复值——每行的Score是固定值,拆分关键词后直接和该固定值配对生成元组即可。

可落地方案

1. 精简自定义函数逻辑

去掉所有会触发报错的冗余代码,保留核心处理逻辑:

def func2(row):
    # 按竖线拆分关键词字符串
    words = row['Keywords'].strip('|').split('|')
    # 逐关键词与当前行固定评分配对,生成二维元组列表
    return [(word, row['Score']) for word in words]

修正后的函数单行调用输出和原有预期完全一致,没有多余依赖。

2. 全量apply处理并展平结果

对DataFrame按行应用函数后,返回值是嵌套结构的列表(每一行对应一个独立的元组列表),通过列表推导式展平就能得到目标长元组列表:

# 逐行应用自定义函数
nested_result = dataframe.apply(func2, axis=1)
# 展平嵌套结构
flat_tuple_list = [item for row_items in nested_result for item in row_items]

3. 生成全新业务DataFrame

拿到展平后的总元组列表后,直接转换为带明确列名的DataFrame即可:

new_df = pd.DataFrame(flat_tuple_list, columns=['Keyword', 'Movie_Score'])
效果验证

上述代码执行后,flat_tuple_list的内容完全匹配预期:

[('adventure', 7.4),
 ('fun', 7.4),
 ('fiction', 7.4),
 ('ogre', 7.4),
 ('castle', 7.4),
 ('heroes', 3.4),
 ('family', 3.4),
 ('fun', 3.4),
 ('entertaining', 3.4),
 ('exciting', 3.4),
 ('prison', 9.1),
 ('emotional', 9.1),
 ('thrilling', 9.1),
 ('entertaining', 9.1),
 ('classic', 9.1)]

整套逻辑没有引入额外依赖,可直接适配500行规模的业务数据集处理,性能和稳定性都能满足正式环境要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 00:45:03