在pandas中,dropna函数分别存在于DataFrame、Series和Index中,下面我们以DataFrame.dropna函数为例进行介绍,Series和Index中的参数意义同DataFrame中大致相同。
pandas.DataFrame.dropna函数
函数参数
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数名称 |
参数取值 |
参数意义 |
axis |
0 or ‘index’, 1 or ‘columns’ , default 0 |
确定是删除包含缺失值的行还是列 |
how |
‘any’ or ‘all’, default ‘any’ |
表明是至少存在一个NAN值还是全为NAN值时执行删除操作 |
thresh |
int, 可选 |
指定存在多少个NAN值才进行删除操作 |
subset |
array, 可选 |
可选子集列表 |
inplace |
bool, default False |
如果为真,执行inplace操作,并返回None |
定义一个DataFrame,具有三个属性,分别是name、address和born。
import pandas as pd
import numpy as np
# 定义一个DataFrame
df = pd.DataFrame({"name": ['张三', '李四', '王五'],
"address": [np.nan, 'Harbin', 'Changchun'],
"born": [pd.NaT, pd.Timestamp("1998-04-25"),
pd.NaT]})
运行结果如下:
1.使用默认参数进行操作
df.dropna()
运行结果如下:
由运行结果看出,该函数把所有含有NAN值的行都执行了删除操作。
2.修改axis参数
df.dropna(axis=1) # 删除列
df.dropna(axis='columns') # 删除列
运行结果如下:
由结果可以看出,通过改变axis参数,可以控制删除操作执行的维度,0代表删除行,1代表删除列。
3.修改how参数
df.dropna(how='all')
运行结果如下:
有运行结果可以看出,数据并没有发生变化,这是因为在该数据中,并没有存在整行全部为NAN值的情况,所以不会进行删除操作。
4.修改thresh参数
df.dropna(thresh=2)
运行结果如下:
通过运行结果可以看出,当thresh=2时,说明将所有NAN值个数大于等于2的行或者列进行删除操作。
5.修改subset参数
df.dropna(subset=['name', 'address'])
运行结果如下:
通过结果截图可以看出,通过subset参数,可以选定一个数据的子集,例如代码中的[‘name’, ‘address’],在这个子集上进行删除操作,而不考虑born中的数据是否含有NAN值。
6.修改inplace参数
import pandas as pd
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
"toy": [np.nan, 'Batmobile', 'Bullwhip'],
"born": [pd.NaT, pd.Timestamp("1940-04-25"),
pd.NaT]})
data = df.dropna(inplace=True)
print('----- the df is ------')
print(df)
print('----- the data is ------')
print(data)
运行结果如下:
由运行结果可以得出:
inplace=True,表示不创建新对象,直接在原始对象上进行修改,返回None;
inplace=False,表示创建新对象,返回创建对象的修改结果。
参考文献
DataFrame.dropna官方文档
Series.dropna官方文档
Index.dropna官方文档