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

DataFrame新增列的函数实现方案及各方法优劣解析

Pandas DataFrame新增列的三种函数实现方式对比

咱们先看基础的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({ 'a': [3, 5, 7, 9], 'b': [4, 12, 24, 40] })

下面是三种用独立函数新增列的实现思路,咱们逐个分析优缺点:

方式1:使用apply()创建Series作为新列添加

def method1(row):
    return np.sqrt(row['a']**2 + row['b']**2)

# 主程序调用
df['c'] = df.apply(method1, axis=1)

优缺点:

  • 优点:
    • 调用代码的签名非常清晰,一眼就能看出是在给DataFrame新增'c'列,可读性拉满;
    • 支持并行处理,配合相关配置或工具可以在大数据量场景下提升效率。
  • 缺点:
    • 函数只能返回单个值,没法一次性生成多列,要加多个列就得写多个函数或者多次调用apply(),不够灵活。

方式2:将整个DataFrame传入函数进行原地修改

def method2(df):
    df['c'] = np.sqrt(df['a']**2 + df['b']**2)

# 主程序调用
method2(df)

优缺点:

  • 优点:
    • 代码量最少,写法最简洁;
    • 能避免apply()的小坑——apply(axis=1)第一次执行时会偷偷跑一遍第一行做类型推断,这个小问题在依赖行状态的函数里可能引发异常,这种方式就没这个顾虑。
  • 缺点:
    • 不符合Pandas的惯用风格,原地修改的操作没有在主程序里显式体现,别人看主程序代码时,不打开method2根本不知道它修改了原DataFrame;
    • 无法做并行处理,因为是直接操作整个DataFrame,没法拆分任务。

方式3:通过apply()扩展行并重构DataFrame

def method3(row):
    row['c'] = np.sqrt(row['a']**2 + row['b']**2)
    return row

# 主程序调用
df = df.apply(method3, axis=1)

优缺点:

  • 优点:
    • 单个函数就能一次性新增多列,只要在函数里给row添加多个字段即可,灵活性很高;
    • 同样支持并行处理,适合大数据量场景的优化。
  • 缺点:
    • 调用代码的可读性很差,光看df = df.apply(method3, axis=1)完全猜不到是在新增列,得看函数内部才明白;
    • 性能表现不佳——apply(axis=1)是逐行处理数据,比Pandas原生的向量化操作慢很多,数据量越大,这个性能差距越明显。

内容的提问来源于stack exchange,提问作者Aniket A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:08