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

关于Pandas中.apply与lambda用法的技术疑问

搞懂Pandas中.apply和lambda的那些疑惑

嘿,这俩组合刚开始用的时候确实容易绕晕,我来给你逐个拆解清楚!

1. .apply是批量修改所有元素还是逐列执行?

apply的执行逻辑取决于你设置的axis参数(默认是axis=0):

  • 当axis=0(默认):逐列执行。它会把每一列作为一个完整的Series对象传入你定义的函数里,函数对整列的元素进行操作,最终返回每列处理后的结果。
  • 当axis=1:逐行执行。这时候会把每一行作为一个Series传入函数,对整行元素操作。

举个实际例子:

import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]})

# 默认axis=0,逐列把每个元素乘2
result = df.apply(lambda x: x * 2)
# 结果:
#    A   B
# 0  2   8
# 1  4  10
# 2  6  12

# axis=1,逐行求和
row_sum = df.apply(lambda x: x.sum(), axis=1)
# 结果:
# 0    5
# 1    7
# 2    9
# dtype: int64

如果想直接批量修改每个元素,其实更推荐用applymap,它才是专门针对每个元素的操作。

2. lambda x: 里的x是每个元素还是每列/每行?

这个完全和apply的axis参数绑定:

  • 默认axis=0:x代表每一列的Series对象,不是单个元素。比如你写df.apply(lambda x: x.name),会返回所有列的列名,因为x是列的Series,x.name就是列名。
  • axis=1:x代表每一行的Series对象。
  • 如果你用的是applymap:x才是每个单独的元素,比如df.applymap(lambda x: str(x))会把每个元素转成字符串。

再举个例子验证:

# x是列的Series,打印每列的最大值
df.apply(lambda x: print(f"列{x.name}的最大值是{x.max()}"))
# 输出:
# 列A的最大值是3
# 列B的最大值是6

3. x.min/x.max返回的是全局最值还是各列/各行的最值?

当x是列或行的Series时,x.min()/x.max()返回的是当前x代表的列或行的最值,也就是各列/各行分别的最值。

比如:

# 求每列的最小值
col_mins = df.apply(lambda x: x.min())
# 结果:
# A    1
# B    4
# dtype: int64

# 求每行的最大值
row_maxs = df.apply(lambda x: x.max(), axis=1)
# 结果:
# 0    4
# 1    5
# 2    6
# dtype: int64

如果想要整个DataFrame的全局最值,你可以在结果上再调用一次min/max,比如df.apply(lambda x: x.min()).min(),或者直接用df.min().min()更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:51:10