相关参数
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
df.dropna(axis=0)
df.dropna(axis=1)
参数2 how : {‘any’, ‘all’}
any : 存在即nan即丢弃,all : 全部为nan才丢弃
df.dropna(axis=0,how='all')
可以发现,并未删除,我们重新增加一列全部为nan
df['f']=np.nan
df
这次再执行
即删除了
参数3 thresh :默认值 None值(int) :要求每排至少N个非NA值
df.dropna(axis=0,thresh=3)
df.dropna(axis=0,thresh=4)
我们选择了对行操作,当thresh值为3的时候并没有删除索引为1的行,虽然它含有两个nan值,但是当thresh的值为4的时对其进行了删除,其原因是该参数的意义就是保留非nan值为参数值的那一行(列),索引为1的行的非nan值为3所以当thresh为3时对其进行了保留,但是当thresh为4的时候则对其进行了不保留(删除)。
参数4 subset : 对某几列判断
如果不加参数默认是对所有列进行判断,加上则是对某几列或某一列进行判断。这几列有空值时删除。
df.dropna(axis=0,subset=['e'])
df.dropna(axis=0,subset=['e','b'])
当把subset选择为e时,并未对该行进行删除操作,因为索引为1的行e值并不为nan。但是当把sunset的列表加入b时就进行了删除,很显然b字段的值为nan,另外需要注意的是subset列表字段为nan进行删除是一个并集,不是交集只要列表里有一个字段或者某一行为nan都进行了删除。
参数5 inplace : 默认值 False
当为False时,我们刚才的操作其实并未在原对象进行修改,他会返回一个新的对象
从上不难看出,当inplace=False时候,原对象并未被修改,而是把修改后的返回给新对象
而当inplace 为True 时则直接对原对象进行操作