Pandas之Dropna和FillNa方法
郝伟 2021/08/18
通常,输入的数据都会有各类问题,其中一个最为常见问题就是空值。数据中的空值有的可以接受(如备注信息),有的不能接受(如一些名称)。在生成了DataFrame对象后,我们可以使用库提供的dropna和fillna来处理。这两个函数分别表示删除空值和使用指定值填充空值。由于两者使用方法非常接近,所以本文以dropna进行介绍,关于fillna的使用方法,可以参考官方文档。
根据官网接口文档,dropna共有以下几个参数:
在本示例中,使用常规的几个参数进行演示。
import pandas as pd import numpy as np # 官方API文档: # https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.dropna.html data = { 'name': ['Tom', np.nan, 'Jack', 'Lucy', None], 'sex': ['male', 'female', 'male', None, None], 'age': [35, 24, 19, 28, None] } # 定义并显示df df = pd.DataFrame(data) print(' df '.center(60, '-')) print(df) # 用于存储所有输出结果 dfs=[df] * 7 # 1 删除有空值的行 dfs[1] = df.dropna() # 2 删除任何一个单元为NaN的行 dfs[2]= df.dropna(axis=0, how='any') # 3 按列进行删除 dfs[3]= df.dropna(axis=1, how='all') # 4 按列进行删除 dfs[4]= df.dropna(axis=1, how='any') # 5 传入这个参数后将只丢弃全为缺失值的那些行 dfs[5] = df.dropna(how = 'all') # 6 丢弃'name'和'age'这两列中有缺失值的行 dfs[6] = df.dropna(axis=0, subset = ['name', 'age'], how='any') # thresh=n,至少包括n个非na值才会保留 dfs[7] = df.dropna(thresh=2) # 显示所有数据 for i in range(len(dfs)): print('----- df{0} -----\n{1}'.format(i, dfs[i])) # 对原始数据直接修改 df.dropna(axis=0, inplace=True, how='any') print('----- {0} -----\n{1}'.format('df', df))
输出结果
---------------------------- df ----------------------------
name sex age
0 Tom male 35.0
1 NaN female 24.0
2 Jack male 19.0
3 Lucy None 28.0
4 None None NaN
----- df0 -----
name sex age
0 Tom male 35.0
1 NaN female 24.0
2 Jack male 19.0
3 Lucy None 28.0
4 None None NaN
----- df1 -----
name sex age
0 Tom male 35.0
2 Jack male 19.0
----- df2 -----
name sex age
0 Tom male 35.0
2 Jack male 19.0
----- df3 -----
name sex age
0 Tom male 35.0
1 NaN female 24.0
2 Jack male 19.0
3 Lucy None 28.0
4 None None NaN
----- df4 -----
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]
----- df5 -----
name sex age
0 Tom male 35.0
1 NaN female 24.0
2 Jack male 19.0
3 Lucy None 28.0
----- df6 -----
name sex age
0 Tom male 35.0
2 Jack male 19.0
3 Lucy None 28.0
----- df -----
name sex age
0 Tom male 35.0
2 Jack male 19.0
关于threth再说几句,可以参考网站。
通过使用dropna或fillna,可以非常方便地对数据源进行初步的预处理,将所有的空值根据需求进行删除或填充。给数据准备工作提供了极大的便利。