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

为什么pandas.DataFrame.apply设置axis=1时返回Series而非DataFrame

核心原因

pandas的apply返回类型由传入函数的返回值形式、axis参数共同决定:

  • 当axis=1(逐行处理)时,每次传入函数的是代表单行的一维Series,你定义的plus_2返回的是普通Python列表,pandas会将这个列表识别为单个元素,最终所有行的返回元素会拼接成一个Series,长度和原DataFrame行数一致。
  • 当axis=0(逐列处理)时,每次传入函数的是代表单列的一维Series,返回的列表长度和原列长度(即原DataFrame行数)一致,pandas会自动将每列的返回结果作为新列,最终拼接为DataFrame。
让axis=1也返回DataFrame的方案

方案1:修改函数返回值为pandas Series

函数返回时指定为Series并匹配原行的index,pandas会自动将每行返回的Series拼成DataFrame:

import pandas as pd
df = pd.DataFrame([[4,9]]*3, columns = ["A", "B"])

def plus_2(x):
    y =[]
    for i in range(0, len(x)):
        y.append(x[i]+2)
    return pd.Series(y, index=x.index)

df_row = df.apply(plus_2, axis = 1)

方案2:对apply结果做二次转换

不需要修改原函数,直接将apply返回的Series的元素展开为DataFrame:

df_row = pd.DataFrame(df.apply(plus_2, axis=1).tolist(), columns=df.columns)

内容的提问来源于stack exchange,提问作者G.T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:36:07