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

如何将函数返回值通过apply拆分为Pandas DataFrame多列?

解决Pandas中apply返回多值拆分列的问题

问题原因分析

  1. 直接解包报错ValueError: too many values to unpack (expected 3):
    df['text'].apply(f)返回的是元素为三元组的Series,你试图将整个Series(包含N个元素,N为DataFrame行数)解包为3个变量,数量不匹配导致报错。

  2. 生成单列('a', 'b', 'c'):
    df['a', 'b', 'c']是将元组('a','b','c')作为单个列名,而非三个独立列名,因此只会新增一列。

  3. 用axis=1和result_type报错:
    你是对Series(df['text'])调用apply,而这两个参数仅适用于对DataFrame调用apply的场景,所以会提示参数不存在。

正确解决方案

方案一:将apply结果转为DataFrame后赋值

利用pd.Series将每个三元组拆分为列,再赋值给原DataFrame的新列:

import pandas as pd

# 假设函数f已定义
df[['a', 'b', 'c']] = df['text'].apply(f).apply(pd.Series, columns=['a', 'b', 'c'])

如果不指定columns,默认列名为0,1,2,之后可通过df.rename(columns={0:'a',1:'b',2:'c'}, inplace=True)重命名。

方案二:用map生成三元组列表再转DataFrame

这种方式效率更高,适合大数据集:

df[['a', 'b', 'c']] = pd.DataFrame(list(map(f, df['text'])), index=df.index)

map(f, df['text'])会将每个text传入函数f,生成三元组的迭代器,转成列表后直接创建DataFrame,再通过索引对齐赋值给原df。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:55:20