优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python中axis=0和axis=1,别再傻傻分不清!

nanyue 2025-02-15 00:27:31 技术文章 4 ℃

在 Python 的数据分析与处理领域,Numpy 和 Pandas 是两个强大的工具,它们为我们提供了高效处理数据的能力。但在使用这两个库时,有一个参数常常让初学者甚至有一定经验的开发者感到困惑,那就是 axis。你是否曾在使用sum、mean、drop等函数时,对axis=0和axis=1的设置犹豫不决?明明看起来只是简单的 0 和 1 的选择,却导致结果大相径庭。今天,就让我们一起揭开 axis 的神秘面纱,深入理解axis=0和axis=1的真正含义 。

axis 的官方解读

在深入探讨之前,我们先来看看官方对于 axis 的定义。axis 是用来为超过一维的数组定义的属性。以二维数据为例,它拥有两个轴 :第 0 轴沿着行的垂直往下,第 1 轴沿着列的方向水平延伸。这就好比我们在绘制一个二维坐标系,0 轴如同纵轴,1 轴如同横轴 。

这里要特别强调的是,千万不要简单地用行和列的思维去理解 axis。行和列本身没有明确的方向概念,而 axis 作为坐标轴是有清晰方向的。官方说法中,1 轴代表横轴,方向从左到右;0 轴代表纵轴,方向从上到下 。这种方向上的理解差异,是理解 axis 的关键,也是很多人容易陷入误区的地方。一旦用错思维,在面对复杂的数据操作时,就会对axis=0和axis=1的结果感到困惑 。

用实例理解 axis=0 和 axis=1

(一)NumPy 数组操作

1. 求和运算

我们通过np.sum函数来看看axis在求和运算中的作用。假设我们有一个二维 NumPy 数组,如下所示:

import numpy as np
arr = np.array([[1, 2, 3],

 [4, 5, 6],

 [7, 8, 9]])

当axis=0时,是沿着行的方向进行计算,也就是对每一列进行求和。代码如下:

sum_axis_0 = np.sum(arr, axis=0)
print(sum_axis_0)

运行结果为:[12 15 18],这是因为第一列1 + 4 + 7 = 12,第二列2 + 5 + 8 = 15,第三列3 + 6 + 9 = 18 。

当axis=1时,是沿着列的方向进行计算,也就是对每一行进行求和。代码如下:

sum_axis_1 = np.sum(arr, axis=1)

print(sum_axis_1)

运行结果为:[ 6 15 24],即第一行1 + 2 + 3 = 6,第二行4 + 5 + 6 = 15,第三行7 + 8 + 9 = 24 。

2. 求均值运算

同样,对于均值计算,axis也有着类似的作用。使用np.mean函数,对上述数组进行均值计算。

当axis=0时,计算每一列的均值:

mean_axis_0 = np.mean(arr, axis=0)
print(mean_axis_0)

运行结果为:[4. 5. 6.],即每列的均值分别为(1 + 4 + 7) / 3 = 4,(2 + 5 + 8) / 3 = 5,(3 + 6 + 9) / 3 = 6 。

当axis=1时,计算每一行的均值:

mean_axis_1 = np.mean(arr, axis=1)

print(mean_axis_1)

运行结果为:[2. 5. 8.],即每行的均值分别为(1 + 2 + 3) / 3 = 2,(4 + 5 + 6) / 3 = 5,(7 + 8 + 9) / 3 = 8 。

(二)Pandas 数据框操作

1. 数据聚合

在 Pandas 的 DataFrame 中,axis的作用同样重要。例如,我们创建一个简单的 DataFrame :

import pandas as pd
data = {

 'A': [1, 2, 3],

 'B': [4, 5, 6],

 'C': [7, 8, 9]

}

df = pd.DataFrame(data)

当使用df.sum方法时,默认axis=0,计算每列的和:

sum_axis_0_df = df.sum()
print(sum_axis_0_df)

运行结果为:

A    6

B 15

C 24

dtype: int64

当axis=1时,计算每行的和:

sum_axis_1_df = df.sum(axis=1)
print(sum_axis_1_df)

运行结果为:

0    12
1 15

2 18

dtype: int64

这体现了axis在数据聚合操作中的关键作用,通过设置不同的axis值,可以按照行或列的方向对数据进行聚合计算。

2. 数据筛选与删除

在数据筛选与删除操作中,axis也发挥着重要作用。以drop函数为例,当axis=0时,表示删除行;当axis=1时,表示删除列。

假设我们要删除 DataFrame 中的某一行,比如索引为 1 的行,可以这样操作:

new_df = df.drop(1, axis=0)
print(new_df)

运行结果会得到一个新的 DataFrame,其中索引为 1 的行被删除。

如果要删除某一列,比如列名为 'B' 的列,则设置axis=1:

new_df = df.drop('B', axis=1)
print(new_df)

运行结果会得到一个新的 DataFrame,其中列 'B' 被删除。

形象记忆法

为了更好地记住axis=0和axis=1的方向,我们可以采用一些形象的记忆方法。比如,把1想象成 F1 赛车在跑道(横轴)上飞驰,方向是从左到右;把0想象成鸡蛋从空中落下(竖轴) ,方向是从上到下。这样,当我们在写代码时,一想到axis=1,脑海中就浮现出赛车从左到右的画面,就能立刻明白是沿着横向进行操作;想到axis=0,就想到鸡蛋下落的方向,即沿着纵向进行操作 。这种形象化的记忆方法,能帮助我们在实际编程中快速准确地选择axis的值 。

多维数据中的 axis 拓展

当数据维度超过二维时,axis 的概念会进一步拓展。以三维数据为例,除了axis=0(沿着垂直方向,类似于二维中的行方向拓展)和axis=1(沿着水平方向,类似于二维中的列方向拓展),还多了axis=2。axis=2表示沿着第三个维度的方向进行操作,这个维度可以理解为在二维平面基础上向 “纵深” 方向延伸 。

假设我们有一个三维 NumPy 数组,形状为(2, 3, 4),表示有 2 个二维数组,每个二维数组是 3 行 4 列。当axis=0时,是沿着第一个维度(即 2 个二维数组的方向)进行操作,比如求和,会将两个二维数组对应位置的元素相加 ;当axis=1时,是在每个二维数组内部沿着行的方向进行操作,类似于二维数组中axis=0的情况 ;当axis=2时,是在每个二维数组内部沿着列的方向进行操作,类似于二维数组中axis=1的情况 。

在实际应用中,随着数据维度的增加,对 axis 的理解和运用会变得更加复杂,但只要牢记 axis 表示的是沿着哪个维度的方向进行操作,就能准确地进行数据处理 。例如,在处理图像数据时,图像数据通常是三维的,分别表示高度、宽度和通道数。通过合理设置 axis,我们可以对图像的不同维度进行操作,如对所有通道求平均值(axis=2),或者对所有图像的同一位置像素求平均值(axis=0) 。

通过以上的深入分析和丰富实例,我们对 Python 中axis=0和axis=1有了全面而深入的理解。axis=0代表沿着纵向(从上到下)进行操作,axis=1代表沿着横向(从左到右)进行操作 。这种方向上的差异,在 NumPy 数组操作和 Pandas 数据框操作中都有着明显的体现,无论是求和、求均值、数据聚合还是数据筛选与删除等操作 。

在实际的数据处理工作中,正确理解和运用axis参数至关重要。它能帮助我们高效地完成数据的各种计算和处理任务,比如在分析销售数据时,通过设置axis可以快速计算出每个产品的总销售额(axis=0对行方向操作,按列聚合),或者每个时间段的销售总额(axis=1对列方向操作,按行聚合) 。

希望大家在今后的 Python 编程实践中,不断运用今天所学的知识,多动手实践,加深对axis=0和axis=1的理解和掌握。相信随着实践经验的积累,你在 Python 数据处理领域会越来越得心应手,轻松应对各种复杂的数据处理任务 。

最近发表
标签列表