pandas fillna_Pandas学习笔记(二)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:48   2903   0

前言

上一篇研究了如何构建一个PandasSeriesDataFrame,之后对DataFrame的行列选择及增加删除行为进行了探索,这一节将从如何对DataFrame进行条件选择开始。

条件选择

DataFrame 中的条件选择指的是这样一回事,比如对某个全为数字的列,我们可以通过指定该列大于或小于某个值,从而得到一个新的结果。下面我们先来用numpy包构造一个全是数字的DataFrame

ac212fd9fbdd480fa4b5724d03e13b57.png

选择第1列大于0的数据:

a393d68402e5cdcf81bb4b71c36c1337.png

如果我们在第1列大于0的结果中只显示第2列,可以这样子:

282b3d2cbeb2cde6739997f1241d883d.png

当然,在已经条件筛选的结果中选择任意列组合也没有问题:

4c7f6a42f9788418e7a48dcde9e8587c.png

上面的一行代码显得简洁,它其实相当于下面代码合在一起的功能: 182dfe7d39a14e4557c5dc67bae63dac.png 如果利用逻辑运算符&|,则会组合出更复杂的选择语句,比如我们要选出第1列大于0,且第3列小于0的结果,可以这样写:

4ea6ac9a4ad15a051b499b91b5e5922e.png

重建索引 有时候我们可能觉得数据框架中的列标没那么明显地显示行数,此时可以用.reset_index()函数来重建一个索引,该函数可以将数据集的行从0len(data)-1进行排列,数据集的前后对比如下:

09e60c293df83b55d801ed9c6bb073f4.png

以上的操作并不改变原数据框架,如果我们想为原数据集添加数字行标,则需要在reset_index()的参数中添加inplace=True,这样就不会创建新的数据框架,而是对原数据框架进行修改:

e1360109d11136cf992d807dc78a9f7c.png

为数据框架重建索引,并不一定要用数字,还可以指定数据集的某一列,比如我们重新为新数据集添加一列:

89e4d1479be9e370b595f2de2e704a70.png

为了将 ID 列作为索引,需要用到 set_index 函数:

4593e58f599feb3a73620f7538c64e53.png

.reset_index 不一样的是, set_index 直接用新列重置了旧索引,当然它也是新建了一个数据框架,原数据集不变。

eba55002f4b6d48968be8f4dac3c1c5a.png

多重索引 熟悉Excel的同学肯定知道在Excel中,有一项数据排序功能,它可以按第一关键列排序,之后再按第二关键列排列。这就牵扯到数据的多重索引问题,在Pandas中,创建多重索引也很容易,它可以从元组数组中产生,但要保证该数组中每一个元组都是独一无二的,比如,我们先来创建一个元组数组:

fcb70e6c162216c49b7ccf0ac181258c.png

接下来,由上面这个数组来创建一个 pandas 多重索引:

6b05c2e5f68f690892c79a21fc5166a3.png

然后根据这个多重索引创建数据框架:

41921b7cd9d672de4ca319064355d4f8.png

同样可用 loc 对上述索引进行数据的选取:

49b7dc4641a25a7be922359c94276aa2.png

刚才创建的 DataFrame 有两个索引,它们应该有不同的名字,现在我们来给它们设置名称:

fcfebc4486babba6d6cf7bf166eb000f.png

如果我们只要选择上述数据框架中的数量为 10 的值,应该这样子来写:

7002fd2d422f32f55c67944cab55d03a.png

对缺失数据的处理

在用pandas读取数据的过程中,难免会产生一些缺失数据,下面我们来创建一个带缺失数据的DataFrame来进行相关演示:

64fccec449f9a20b0278ac8b564df3a2.png

dropna可以去掉任何含有NaN值的行,要删除含有NaN值的列,则需要dropna(axis=1),默认axis=0:

c9c683aab062946e2f39a8c907230cff.png

dropna相似的还有一个fillna函数,它可以给缺失值填充数值,比如将所有的NaN值替换为10

16c774271a767d3f7034d395a91de68e.png

或者将指定列的 NaN 填充为该列的平均值:

9116026863b8d7c24aa8d14ca1de5c17.png

和前面的函数类似, dropnafillna 都不改变原数据框架,它们的运行结果都是重新生成新的数据框架。

小结

本文研究了DataFrame的条件选择,又对数据框架的索引问题进行了分析,最后对数据框架中的缺失值进行了筛选和填充,接下来,我们将学习利用Pandas进行数据的聚合。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP