相关参数

pd.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

参数1 axis : 0为删除行,1为删除列

import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(4,5),columns=list('abcde'))
df.loc[1,['b','d']]=np.nan

python drop函数里加上条件 python中的dropna函数_dropna

df.dropna(axis=0)

python drop函数里加上条件 python中的dropna函数_Python中删除含有nan字段的列或行_02

df.dropna(axis=1)

python drop函数里加上条件 python中的dropna函数_pandas_03

参数2 how : {‘any’, ‘all’}

any : 存在即nan即丢弃,all : 全部为nan才丢弃

df.dropna(axis=0,how='all')

python drop函数里加上条件 python中的dropna函数_python drop函数里加上条件_04


可以发现,并未删除,我们重新增加一列全部为nan

df['f']=np.nan
df

python drop函数里加上条件 python中的dropna函数_Python中删除含有nan字段的列或行_05


这次再执行

python drop函数里加上条件 python中的dropna函数_Python_06


即删除了

参数3 thresh :默认值 None值(int) :要求每排至少N个非NA值

df.dropna(axis=0,thresh=3)

python drop函数里加上条件 python中的dropna函数_pandas_07

df.dropna(axis=0,thresh=4)

python drop函数里加上条件 python中的dropna函数_pandas_08


我们选择了对行操作,当thresh值为3的时候并没有删除索引为1的行,虽然它含有两个nan值,但是当thresh的值为4的时对其进行了删除,其原因是该参数的意义就是保留非nan值为参数值的那一行(列),索引为1的行的非nan值为3所以当thresh为3时对其进行了保留,但是当thresh为4的时候则对其进行了不保留(删除)。

参数4 subset : 对某几列判断

如果不加参数默认是对所有列进行判断,加上则是对某几列或某一列进行判断。这几列有空值时删除。

df.dropna(axis=0,subset=['e'])

python drop函数里加上条件 python中的dropna函数_Python中删除含有nan字段的列或行_09

df.dropna(axis=0,subset=['e','b'])

python drop函数里加上条件 python中的dropna函数_Python中删除含有nan字段的列或行_10


当把subset选择为e时,并未对该行进行删除操作,因为索引为1的行e值并不为nan。但是当把sunset的列表加入b时就进行了删除,很显然b字段的值为nan,另外需要注意的是subset列表字段为nan进行删除是一个并集,不是交集只要列表里有一个字段或者某一行为nan都进行了删除。

参数5 inplace : 默认值 False

当为False时,我们刚才的操作其实并未在原对象进行修改,他会返回一个新的对象

python drop函数里加上条件 python中的dropna函数_Python_11


从上不难看出,当inplace=False时候,原对象并未被修改,而是把修改后的返回给新对象

python drop函数里加上条件 python中的dropna函数_Python中删除含有nan字段的列或行_12


而当inplace 为True 时则直接对原对象进行操作

python drop函数里加上条件 python中的dropna函数_dropna_13