关于pandas中DataFrame.apply()方法axis参数取值的疑问
关于pandas中DataFrame.apply()方法axis参数取值的疑问
完全懂你的困惑!我刚接触pandas的时候,对着apply()的axis参数也挠过好几次头——明明之前记的axis=0对应行、axis=1对应列,怎么到这里好像反过来了?
其实这个逻辑说透了就很简单,核心是要搞懂pandas里axis参数的本质:它指的是函数要沿着哪个轴的方向去“滑动应用”,或者说,要将哪个轴的维度“合并计算”。针对DataFrame.apply()具体来说:
- 当设置
axis=0(默认值)时,函数会沿着列的垂直方向(从上到下)应用:也就是把每一列的所有行元素作为输入,传给你指定的函数。比如对每一列求和,最终返回的结果会对应原DataFrame的每一列。 - 当设置
axis=1时,函数会沿着行的水平方向(从左到右)应用:也就是把每一行的所有列元素作为输入,传给你指定的函数。比如对每行求最大值,最终返回的结果会对应原DataFrame的每一行。
给你举个直观的代码例子就清楚了:
import pandas as pd # 构造一个简单的DataFrame df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4, 5, 6] }) # axis=0:对每一列应用sum函数 col_sum = df.apply(sum, axis=0) print(col_sum) # 输出: # A 6 # B 15 # dtype: int64 # axis=1:对每一行应用sum函数 row_sum = df.apply(sum, axis=1) print(row_sum) # 输出: # 0 5 # 1 7 # 2 9 # dtype: int64
最后给你个好记的小技巧:
- 把
axis=0想成“竖轴”,函数顺着竖线(列)走,处理每一列的所有行 - 把
axis=1想成“横轴”,函数顺着横线(行)走,处理每一行的所有列
其实不止apply(),pandas里大部分函数的axis参数逻辑都是统一的,只是apply()的场景更容易让我们混淆“操作对象”和“操作方向”,多写两次实例就能刻进脑子里啦!




