前言
上一篇研究了如何构建一个
Pandas
的
Series
和
DataFrame
,之后对
DataFrame
的行列选择及增加删除行为进行了探索,这一节将从如何对
DataFrame
进行条件选择开始。
条件选择
DataFrame
中的条件选择指的是这样一回事,比如对某个全为数字的列,我们可以通过指定该列大于或小于某个值,从而得到一个新的结果。下面我们先来用
numpy
包构造一个全是数字的
DataFrame
:
选择第1列大于0的数据:
如果我们在第1列大于0的结果中只显示第2列,可以这样子:
当然,在已经条件筛选的结果中选择任意列组合也没有问题:
上面的一行代码显得简洁,它其实相当于下面代码合在一起的功能:
如果利用逻辑运算符
&
和
|
,则会组合出更复杂的选择语句,比如我们要选出第1列大于0,且第3列小于0的结果,可以这样写:
重建索引
有时候我们可能觉得数据框架中的列标没那么明显地显示行数,此时可以用
.reset_index()
函数来重建一个索引,该函数可以将数据集的行从
0
到
len(data)-1
进行排列,数据集的前后对比如下:
以上的操作并不改变原数据框架,如果我们想为原数据集添加数字行标,则需要在
reset_index()
的参数中添加
inplace=True
,这样就不会创建新的数据框架,而是对原数据框架进行修改:
为数据框架重建索引,并不一定要用数字,还可以指定数据集的某一列,比如我们重新为新数据集添加一列:
为了将
ID
列作为索引,需要用到
set_index
函数:
和
.reset_index
不一样的是,
set_index
直接用新列重置了旧索引,当然它也是新建了一个数据框架,原数据集不变。
多重索引
熟悉
Excel
的同学肯定知道在
Excel
中,有一项数据排序功能,它可以按第一关键列排序,之后再按第二关键列排列。这就牵扯到数据的多重索引问题,在
Pandas
中,创建多重索引也很容易,它可以从元组数组中产生,但要保证该数组中每一个元组都是独一无二的,比如,我们先来创建一个元组数组:
接下来,由上面这个数组来创建一个
pandas
多重索引:
然后根据这个多重索引创建数据框架:
同样可用
loc
对上述索引进行数据的选取:
刚才创建的
DataFrame
有两个索引,它们应该有不同的名字,现在我们来给它们设置名称:
如果我们只要选择上述数据框架中的数量为
10
的值,应该这样子来写:
对缺失数据的处理
在用
pandas
读取数据的过程中,难免会产生一些缺失数据,下面我们来创建一个带缺失数据的
DataFrame
来进行相关演示:
用
dropna
可以去掉任何含有
NaN
值的行,要删除含有
NaN
值的列,则需要
dropna(axis=1)
,默认
axis=0
:
与
dropna
相似的还有一个
fillna
函数,它可以给缺失值填充数值,比如将所有的
NaN
值替换为
10
:
或者将指定列的
NaN
填充为该列的平均值:
和前面的函数类似,
dropna
和
fillna
都不改变原数据框架,它们的运行结果都是重新生成新的数据框架。
小结
本文研究了
DataFrame
的条件选择,又对数据框架的索引问题进行了分析,最后对数据框架中的缺失值进行了筛选和填充,接下来,我们将学习利用
Pandas
进行数据的聚合。