![d49f1c083345205ded5163790f9c8186.png](https://i-blog.csdnimg.cn/blog_migrate/33c5680c2a525e84ba46516de3a6faed.jpeg)
在使用python里的pandas库进行数据分析工作时,很多时候我们都会遇到这样一个问题:数据缺失。这也是大部分数据分析工作所会遇到的之一。而正确处理缺失值,也是我们在数据分析中数据预处理环节的关键的一环。下面我将讲讲在我学习Pandas的时候,对缺失值处理的一些总结。
首先在进行我们的缺失值处理之前,简单和大家做个小说明,在我们的pandas中,空值和缺失值是不同的。
空值:在pandas中的空值是:" "
缺失值:pandas里,如果是DataFrame(数据帧)中,缺失值可以表示为nan或者naT(缺失时间)。如果是在Series中,则为none或者nan。
同样的,如果想要生成缺失值的话,用:
生成缺失值可以使用:
pd.NaT 或np.nan
下面开始具体说说缺失值的处理。
(1)删除(dropna)
在遇到某列数据(标签或指标等)大量丢失时,我们常用的方法,是将该含有过多空值的行/列删除,通常这也是一种行之有效的做法。而一般在pandas里,我们用dropna函数实现这一操作。
具体函数:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
函数作用:
删除含有空值的行或列
函数具体参数:
- axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
- how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
- thresh: axis中至少有thresh个非缺失值,否则删除。(对此参数存在疑问的,我会在另外的文章写到)
- subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
- inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。默认是False,即创建新的对象进行修改,原对象不变,和深复制和浅复制有些类似。(对此参数存在疑问的,我会在另外的文章写到)
下面我们举几个小例子:(以下代码均在jupyter运行,大家print的时候注意一下)
import pandas as pd
import numpy as np
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})
df
运行结果:
![0573a462b6b8bd3beda938709a119416.png](https://i-blog.csdnimg.cn/blog_migrate/9b89c6a611ec161bc33d511c43da5835.png)
可以看到,运行结果中出现了三个缺失值,下面我们来尝试一下用dropna函数处理它
(1)默认参数:删除行,只要有空值就会删除,不替换。
![91b932eff4974e53d68e6a3163bbe8bb.png](https://i-blog.csdnimg.cn/blog_migrate/fc19527fb76283ca65e0b34c79ffb3a9.png)
可以看到,此时含有缺失值的行和列都被删除了,只剩下不含空值的行和列。
(2)指定行/列时:
![7521fd47047aabdd59fd0b4186d33e54.png](https://i-blog.csdnimg.cn/blog_migrate/1f272656f6a3a8ab789f91282bca75ac.png)
可以看到,当我们通过axis=0或axis=1指定行/列时,程序会帮我们输出不含缺失值的行/列。
(3)当想指定所有值全为缺失值才删时,用how="all":
![e2a0ed14bd25120d41a06f132f0062c3.png](https://i-blog.csdnimg.cn/blog_migrate/db05fa0e0d55a0d78f436970b5f1201a.png)
(4)当想指定至少出现过两个缺失值才删除,用(thresh=2):
![772825a3cb3e45893b19e99b5bd44a92.png](https://i-blog.csdnimg.cn/blog_migrate/c36bc316b741e7a972d10de6e2accbcd.png)
(5)当想指定删除某个分组(可以理解成哪几列或那几个标签)中的含有缺失值的行或列,用subset=[ ]:
![dc9946de8b5efb5339d433333b258525.png](https://i-blog.csdnimg.cn/blog_migrate/0209d2c6ab227bca0d4a69e33834071e.png)
以上便是<如何处理Pandas里的缺失值(入门篇1)>的内容,欢迎感兴趣的小伙伴关注下半部分<如何处理Pandas里的缺失值(入门篇2)>:
侦探L:如何处理Pandas里的缺失值(入门篇2)zhuanlan.zhihu.com![6fa4699c6bfb7be1d6403485de290238.png](https://i-blog.csdnimg.cn/blog_migrate/3d755f2ce5d82d258620efb083893384.jpeg)
更多内容请小伙伴们看我的其他文章,同时留意我的动态。