python dataframe 删除NaN 行_pandas删除某列有空值的行


在使用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)


函数作用:

删除含有空值的行或列

函数具体参数:

  1. axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
  2. how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
  3. thresh: axis中至少有thresh个非缺失值,否则删除。(对此参数存在疑问的,我会在另外的文章写到)
  4. subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
  5. 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


运行结果:


python dataframe 删除NaN 行_缺失值_02


可以看到,运行结果中出现了三个缺失值,下面我们来尝试一下用dropna函数处理它

(1)默认参数:删除行,只要有空值就会删除,不替换。


python dataframe 删除NaN 行_数据分析_03


可以看到,此时含有缺失值的行和列都被删除了,只剩下不含空值的行和列。

(2)指定行/列时:


python dataframe 删除NaN 行_pandas删除某列有空值的行_04


可以看到,当我们通过axis=0或axis=1指定行/列时,程序会帮我们输出不含缺失值的行/列。

(3)当想指定所有值全为缺失值才删时,用how="all":


python dataframe 删除NaN 行_缺失值_05


(4)当想指定至少出现过两个缺失值才删除,用(thresh=2):


python dataframe 删除NaN 行_pandas frame 删除一行_06


(5)当想指定删除某个分组(可以理解成哪几列或那几个标签)中的含有缺失值的行或列,用subset=[ ]:


python dataframe 删除NaN 行_pandas删除某列有空值的行_07



以上便是<如何处理Pandas里的缺失值(入门篇1)>的内容,欢迎感兴趣的小伙伴关注下半部分<如何处理Pandas里的缺失值(入门篇2)>:

侦探L:如何处理Pandas里的缺失值(入门篇2)zhuanlan.zhihu.com

python dataframe 删除NaN 行_pandas删除某列有空值的行_08