看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本文介绍在 pandas 中的一个难点,axis 参数的取值 0 和 1 分别代表什么,怎么理解。在 Pandas 的 DataFrame 对象中,它的许多函数和方法都一个 axis 参数,这个参数的赋值不同,代表的数据处理方式不同,究竟应该怎么理解呢?
axis 参数主要针对的是 DataFrame 对象,由于 DataFrame 一般是一个二维表,在:
等操作时,由于二级数据有方向性,需要按行或者按列进行计算,就需要 axis 参数来指定。
典型的例子如求一个数据表的和,有按行求和及按列求和两种方式,即:
df.sum() # 按列,默认 axis=0
df.sum(1) # 按行
df.sum(axis=1) # 同上
因此,axis 参数的设计是基于实际的需要出发。
axis 的可传入参数有两种形式,一种是数字,一种是字符,形式如 {0 or ‘index’, 1 or ‘columns’, None}, default 0
,即:
一般我们采用数字形式,如果为了让表达更加显式,可以采用字符形式。
另外,还有如 fillna() 默认为 None 的取值,就代表不指定行列,对全体数据进行操作。
很多人不是非常理解 axis 为 0 和 1 时代表着什么,认为 0(‘index’)代表行,但计算的结果却是每列的计算值,1 代表(‘columns’)表,却是每个行的计算值,另外还有一个 drop() 方法,要删除列时,得让 axis=1(‘columns’),如下:
import pandas as pd
df = pd.read_csv('https://gairuo.com/file/data/team.csv')
df.head()
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
df.sum(axis=0, numeric_only=True)
'''
Q1 4920
Q2 5255
Q3 5267
Q4 5278
dtype: int64
'''
df.sum(axis=1, numeric_only=True)
'''
0 198
1 167
2 219
3 338
4 261
...
95 268
96 125
97 212
98 234
99 179
Length: 100, dtype: int64
'''
df.drop(['team', 'Q1'], axis=1)
'''
name Q2 Q3 Q4
0 Liver 21 24 64
1 Arry 37 37 57
2 Ack 60 18 84
3 Eorge 96 71 78
4 Oah 49 61 86
.. ... .. .. ..
95 Gabriel 59 87 74
96 Austin7 31 30 43
97 Lincoln4 93 1 20
98 Eli 74 58 91
99 Ben 43 41 74
[100 rows x 4 columns]
'''
这就让人疑惑了,到底 axis 是什么意思?
axis [ˈæksɪs] 在英文中是轴的意义,pandas 官方文档在介绍这个参数时一般会用沿...轴(Axis along... )。如 mean() 中,它指定的是沿其计算平均值的轴。默认情况下,轴=0。这与显式指定 axis 时的 numpy.mean 用法一致( 在numpy.mean 中,默认情况下 axis=None,它计算展平数组即一维数组上的平均值),其中 axis=0 沿行(即 pandas 索引),axis=1 沿列。为了更加清晰,可以选择指定 axis='index'(而不是axis=0)或 axis='columns'(而不是axis=1)。
简单说,就是计算是朝着哪个方向去操作,如果为 0 就朝着行(index)去计算,当所有的行计算完后就只剩下一行了,就实现了按列的数据操作;同样为 1 时,会朝着列(columns)的方向去操作,操作完后,所有的行得到保留,实现了按行的的操作。
一些比喻说明:
至于 drop() 方法,道理是一样的,如果要删除列,那方向必然为列(axis=1),只不过,不在删除范围的列名会跳过,得以保留。
还有取 None 值的情况就是计算没有方向,如 fillna() 默认为 None,它会填充全表中所有的缺失值,如指定 method(取值 {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认 None)bfill 或者 ffill 具有方向性的操作时,就需要 axis 来指定方向。
更新时间:2022-05-12 18:08:15 标签:pandas axis