Pandas中axis参数工作原理:为何dropna(axis=1)会删除列?
Pandas
axis 参数的实际运行逻辑 认知偏差来自于多数入门教程对axis参数的过度简化,本质上axis指定的是操作执行的遍历方向,而非简单的“操作对象是行还是列”:
- Pandas 中
axis=0对应纵向(沿行索引从上到下的方向),axis=1对应横向(沿列名从左到右的方向) - 所有涉及轴的方法,都会沿着指定的轴方向遍历取值做判断/计算,最终保留该轴的原有长度,另一个轴会被聚合压缩或者筛选删除。
两个方法的逻辑拆解
1. df.sum(axis=1)返回行求和结果的原因
sum属于聚合类方法,指定axis=1时,计算沿着横向(跨列方向)遍历每一行的所有列取值求和,每一行的多个列值被聚合成1个结果,最终保留0轴(行索引)的原有长度,所以返回值是每行的求和值,长度和原表行数一致,和运行结果完全匹配:
df.sum(axis=1) # 输出 # 0 13.0 # 1 17.0 # 2 14.0 # 3 6.0
2. df.dropna(how='any', axis=1)删除列的原因
dropna属于筛选类方法,指定axis=1时,检查逻辑沿着横向(跨列方向)逐列扫描:只要某一列里存在任意一个缺失值,就把这一整列删掉。示例中A列第0行是NaN、C列第3行是NaN,只有B列无缺失值,所以最终A、C列被删除,仅保留B列:
df.dropna(how='any', axis=1) # 输出 # B # 0 9 # 1 8 # 2 3 # 3 3
快速记忆规则
不用死记“axis=0/1对应行还是列”,直接按规则套用即可:
- 需要得到每行的聚合结果(每行求和、每行均值等),或者删除存在缺失值的列:用
axis=1 - 需要得到每列的聚合结果(每列求和、每列最大值等),或者删除存在缺失值的行:用
axis=0
如果要实现“删除所有包含缺失值的行”的需求,正确写法为:
df.dropna(how='any', axis=0)
内容的提问来源于stack exchange,提问作者user1888243
相关产品推荐
相关产品推荐

