关于pandas中axis属性的一点理解感受

看了简书中的一篇文章,想起自己理解axis上有点偏差,现在统一拿出来总结一下,数据就使用我看的文章里的数据吧,首先初始化

# -*- coding: utf-8 -*-
from pandas import Series
from numpy import nan as NA
import pandas as pd
import numpy as np
#首先创建所需数据集的Series
manager=Series([1,2,3,4,5])
country=Series(['US','US','UK','UK','UK'])
gender=Series(['M','F','F','M','F'])
age=Series([32,45,25,39,99])
q1=Series([5,3,3,3,2])
q2=Series([4,5,5,3,2])
q3=Series([5,2,5,4,1])
q4=Series([5,5,5,NA,2])
q5=Series([5,5,2,NA,1])
#将Series拼成DataFrame
leadership=pd.DataFrame({'manager':manager,'country':country,'gender':gender,'age':age,'q1':q1,'q2':q2,'q3':q3,'q4':q4,'q5':q5})
#补充未添加的列
date=Series(['2008/10/24','2008/10/28','2008/10/01','2008/10/12','2009/5/1'])
leadership['date']=date

现在我们将所有行的q1至q5列累加形成一个total列

leadership['total']=np.sum(leadership.ix[:,'q1':'q5'],axis=1)

其中axis=1是什么意思呢?首先用最通俗的说法表示axis就是数组中的括号,axis=0表示操作的是最外层的括号,axis=1表示从外到内数的第二个括号,二维数组最大为1,同理三维数组最大为2,axis代表数组中从外到内的括号序列。axis的数值代表要操作的括号对象的层级,对这个层级的数据执行操作。如下图所示:


axis含义说明

既然已经说明了含义,我就再举一个例子,也是文章里的,按照这种说法去理解文章中的这段代码,首先,不废话,先把文章中的代码贴出来

leadership.dropna(axis=1,how='any')

上面这段代码的含义是什么呢,我们按照上面说的,因为datafame相当于一个二维数组,所以相当于对第二层括号里的数据进行操作,对第二个括号中的所有数据执行dropna操作,how='any' 表示判断条件只要有一个满足就剔除,how='all'表示所有条件都满足才剔除,所以只要第二个括号中的数据有一列为na,则删除这一列,上面的代码返回的数据是

   age country gender  manager  q1  q2  q3        date  total
0   32      US      M        1   5   4   5  2008/10/24   24.0
1   45      US      F        2   3   5   2  2008/10/28   20.0
2   25      UK      F        3   3   5   5  2008/10/01   20.0
3   39      UK      M        4   3   3   4  2008/10/12   10.0
4   99      UK      F        5   2   2   1    2009/5/1    8.0

为NA的那两列被去掉了
同样,我们把axis改成0,那么表示对第一个括号中的数据进行操作,对数据中的所有第一个括号中的数据执行dropna操作,只要有一个为na,则第一层括号内的这个数据序列就要被删除,所以返回的结果为

   age country gender  manager  q1  q2  q3   q4   q5        date  total
0   32      US      M        1   5   4   5  5.0  5.0  2008/10/24   24.0
1   45      US      F        2   3   5   2  5.0  5.0  2008/10/28   20.0
2   25      UK      F        3   3   5   5  5.0  2.0  2008/10/01   20.0
3   39      UK      M        4   3   3   4  NaN  NaN  2008/10/12   10.0
4   99      UK      F        5   2   2   1  2.0  1.0    2009/5/1    8.0

推荐阅读更多精彩内容