1. 缺失值判定 一般使用 NaN 代表缺失值,在 Numpy 中可定义为 np.NaN/np.nan,在 Pandas 中可使用 pd.NA 来代表。
- 缺失值判定
'''缺失值判定'''
import pandas as pd
import numpy as np
pd.isna(pd.NA)
pd.isna(np.nan)
pd.isna(np.NaN)
输出结果:

- 测试案例一
'''构造测试用例'''
import pandas as pd;
array = np.array([[1, np.nan, 3], [4, 5, np.nan]])
array
'''当object为array类型'''
pd.isna(array)
输出结果:

- 测试案例二
'''构造测试用例'''
import pandas as pd;
df = pd.DataFrame([['ant', 'bee', 'cat'], ['dog', None, 'fly'],
['dog', np.nan, np.nan], ['dog', np.nan, 'fly']],
columns=['A','B','C'])
df
'''当object为DataFrame类型'''
pd.isna(df) ## pd.notna(df)
输出结果:

2. 缺失值填充
- 测试案例
'''构造测试用例'''
import pandas as pd;
df = pd.DataFrame([['ant', 'bee', 'cat'], ['dog', None, 'fly'],
['dog', np.nan, np.nan], ['dog', np.nan, 'fly']],
columns=['A','B','C'])
df
'''将B列中缺失值填充为-3'''
##方法一
tmp=df.copy()
tmp.B.fillna(-3, inplace=True)
##方法二
def fillmiss(df):
if pd.isna(df['B']) :
return -3
else:
return df['B']
tmp=df.copy()
tmp['B']=tmp.apply(fillmiss,axis=1)
tmp
输出结果:

- 其他补充
# 填充为 0
df.fillna(0)
# 填充为指定字符
df.fillna('missing')
# 指定字段填充
df.B.fillna(0, inplace=True)
# 不同列替换不同的值
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)
# 不指定填充值,使用 method
df.fillna(method='backfill')
# 对指定列填充平均值
df.fillna(df.mean()['A':'B'])
3. 缺失值删除
# 删除所有有缺失值的行
df.dropna(inplace=True)
# 删除所有有缺失值的列
df.dropna(axis='columns') ##或者df.dropna(axis=1)
# 删除所有值缺失的行
df.dropna(how='all')
# 指定判断缺失值的列范围
df.dropna(subset=['A', 'B']) ##df.A.dropna()
4. 官方文档
import pandas as pd
help(pd.isna) ##或者使用 help(pd.isnull)
help(pd.notna)
help(df.fillna)
help(df.dropna)
输出结果:

2021-11-26 08:40
阅读原文