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

Pandas DataFrame中apply函数传递给min_max的参数及行输出差异疑问

搞懂Pandas apply传递给min_max的内容

嘿,我来帮你拆解这个问题!你遇到的核心困惑,大概率是没搞清楚apply函数默认的数据传递方向,以及它实际传给min_max的是什么类型的数据。

1. 先明确:apply默认按「列」传递数据

当你直接调用df.apply(min_max)而不指定axis参数时,Pandas默认会按列来遍历你的DataFrame——也就是说,传给min_max的row变量,其实是每一列的Series对象,而不是你以为的“行”!

举个直观的例子,假设你的DataFrame是这样:

import pandas as pd
df = pd.DataFrame({
    'col1': [10, 20, 30],
    'col2': [40, 50, 60]
})

当你调用df.apply(min_max),min_max会先拿到col1列的Series:

0    10
1    20
2    30
Name: col1, dtype: int64

接着拿到col2列的Series。这时候你打印的row是列数据,和你直接打印整个DataFrame的行结构自然完全不一样。

2. 要传递「行」数据?指定axis=1

如果你希望min_max处理每一行的数据,必须给apply加上axis=1参数:

df.apply(min_max, axis=1)

这时候传给min_max的row才是每一行的Series对象,它的索引是原DataFrame的列名,值是该行对应的各列数据。比如第一行的row会是:

col1    10
col2    40
Name: 0, dtype: int64

这时候你打印的内容,就和你用df.iloc[0]打印的行数据结构一致了。

3. 验证小技巧:在min_max里打印类型和索引

如果你还是不确定传递的是什么,可以在min_max里加两行代码来确认:

def min_max(row):
    print("传递的对象类型:", type(row))
    print("对象的索引:\n", row.index)
    print("对象的值:\n", row)
    # 你的业务逻辑...
    return row.min(), row.max()

运行后你就能清楚看到:

  • 默认axis=0时,索引是原DataFrame的行索引,值是列数据
  • axis=1时,索引是原DataFrame的列名,值是行数据

总结一下

apply函数传给min_max的是Series对象,传递方向由axis参数控制:

  • axis=0(默认):按列传递,每个Series对应一列数据
  • axis=1:按行传递,每个Series对应一行数据

你看到打印结果和外部DataFrame不一致,就是因为默认按列传递,你打印的“row”其实是列数据,和行结构自然不同~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:42