如何理解并记忆DataFrame中的Axis参数

Posted bluishglc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解并记忆DataFrame中的Axis参数相关的知识,希望对你有一定的参考价值。

当我们遇到有axis参数的方法时,脑子里的第一反应应该是:这个方法一定是沿着某一方向进行某种“聚合”或者“过滤”操作。在此场景下,Axis参数就是用来设定操作方向的:是垂直方向还是水平方向?

axis=0: 一行一行推进(沿垂直方向“聚合”或“过滤”)

axis=0axis=index时,DataFrame会沿着“垂直方向”进行“迭代”,它的操作其实是作用到一到多个行上的,所以:

  • df.sum(axis=0) 是针对每一求和;
  • df.drop(index, axis=0) 是去掉某一数据;

这里就是考察我们对axis理解的地方了,同样是axis=0,sum是按求和,而drop就变成了删除的操作,这里的关键还是要结合操作本身和axis的轴线方向一起来看。sum: 求和操作,axis=0,沿垂直方向逐行推进,所以就是:对列求和。drop:删除操作,axis=0,沿垂直方向逐行推进,所以就是:按行删除。请看下面的示例代码:

import pandas as pd

df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col0", "col1", "col2", "col3"], index=["row0", "row1", "row2"])
print(df)
print("------------")
# 沿垂直方向推进,操作是求和,所以结果是:按列求和
print(df.sum(axis=0))
print("------------")
# 依然是沿垂直方向推进,操作是删除,所以一旦找到名为"row0"的label,则必定是一个行,所以结果将是:按行删除
print(df.drop("row0", axis=0))

程序输出:

      col0  col1  col2  col3
row0     1     1     1     1
row1     2     2     2     2
row2     3     3     3     3
------------
col0    6
col1    6
col2    6
col3    6
dtype: int64
------------
      col0  col1  col2  col3
row1     2     2     2     2
row2     3     3     3     3

注意,如果我们把drop操作写为:df.drop("row0", axis=1),运行时会报错:"['row0'] not found in axis",原因是:在水平方向上( axis=1)找不到label为row0的列!这也从侧面反映了:DataFrame总是如实地根据轴线方向进行数据的查找和过滤。

axis=1: 一列一列推进(沿水平方向“聚合”或“过滤”)

当axis=1或axis=columns时,DataFrame会沿着“水平方向”进行,它的操作其实是作用到一到多个列上的,所以:

  • df.sum(axis=1) 是针对每一求和;
  • df.drop(col_name, axis=1) 是去掉某一数据;

此处逻辑与前面相同,再次看一下示例代码:

import pandas as pd

df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col0", "col1", "col2", "col3"], index=["row0", "row1", "row2"])
print(df)
print("------------")
# 沿水平方向推进,操作是求和,所以结果是:按行求和
print(df.sum(axis=1))
print("------------")
# 依然是沿水平方向推进,操作是删除,所以一旦找到名为"col0"的label,则必定是一个列,所以结果将是:按列删除
print(df.drop("col0", axis=1))

程序输出:

      col0  col1  col2  col3
row0     1     1     1     1
row1     2     2     2     2
row2     3     3     3     3
------------
row0     4
row1     8
row2    12
dtype: int64
------------
      col1  col2  col3
row0     1     1     1
row1     2     2     2
row2     3     3     3

同样的,如果我们把drop操作写为:df.drop("col0", axis=0),运行时会报错:"['col0'] not found in axis"",原因是:在垂直方向上( axis=0)找不到label为col0的行!这也从侧面反映了:DataFrame总是如实地根据轴线方向进行数据的查找和过滤。

最后,再次提醒:一般有axis参数的方法,往往都是要沿着某一方向进行“聚合”或者“过滤”操作!

以上是关于如何理解并记忆DataFrame中的Axis参数的主要内容,如果未能解决你的问题,请参考以下文章

改组/排列熊猫中的DataFrame

python pandas-->删除DataFrame某行或某列

对numpy axis(轴)的理解

Pandas Dataframe / Numpy Array“轴”定义中的歧义

pandas中axis的含义

pandas中的axis参数(看其他人的博客中产生的疑问点,用自己的话解析出来)