缺失值处理
# 概述
- pandas 中的缺失值用 NaN(Not a Number)来表示。
- 时间的缺失值用 NaT(Not a Time)来表示。
- 如果要显式地使用 NaN 值,可以使用
numpy.nan
来获取。 - Python 内置的 None 值在 pandas 中也是 NaN。
处理缺失值的主要方法:
方法 | 说明 |
---|---|
dropna | 根据各标签值中是否存在却只出具对轴变迁进行过滤,可通过阈值调节对缺失值的容忍度 |
fillna | 用指定值或插值方法(如ffill或bfill)填充缺失数据 |
isnull | 返回一个含有布尔值的对象,这些布尔值表示哪些值是NaN |
notnull | 返回一个含有布尔值的对象,这些布尔值表示哪些值不是NaN |
import numpy as np
import pandas as pd
1
2
2
# dropna()
s.dropna(axis=0, inplace=False, **kwargs)
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
- axis:删除包含缺失值的行还是列。默认为行
- how:指定删除方式。默认为 any,只要有一个为缺失值就删除;如果指定为 all,则该行或列全部为缺失值才删除
- thresh:指定至少包含几个缺失值才删除
- subset:指定需要考虑缺失值的标签
- inplace:是否原地删除
df = pd.DataFrame({'name':['张三', '李四', '王五', '赵六', '陈七'], 'age':[20,21, np.nan, np.nan, np.nan], 'city':['cd', 'bj', np.nan,'gz', np.nan]})
df
1
2
2
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | NaN |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
df.dropna(axis=0)
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
df.dropna(axis=1)
1
name | |
---|---|
0 | 张三 |
1 | 李四 |
2 | 王五 |
3 | 赵六 |
4 | 陈七 |
df.dropna(how='all')
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | NaN |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
df.dropna(thresh=2)
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
3 | 赵六 | NaN | gz |
df.dropna(subset=['city'])
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
3 | 赵六 | NaN | gz |
# fillna()
s.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
- value:填充的值。可以为标量,dict, Series,DataFrame
- method:填充方式。可选值为 backfill,bfill,pad,ffill,None
- axis:沿着哪个轴填充
- inplace:是否原地填充
df.fillna(0)
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | 0.0 | 0 |
3 | 赵六 | 0.0 | gz |
4 | 陈七 | 0.0 | 0 |
df.fillna({'age': 18, 'city': 'cd'})
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | 18.0 | cd |
3 | 赵六 | 18.0 | gz |
4 | 陈七 | 18.0 | cd |
df.fillna(method='ffill')
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | 21.0 | bj |
3 | 赵六 | 21.0 | gz |
4 | 陈七 | 21.0 | gz |
df.fillna(method='pad')
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | 21.0 | bj |
3 | 赵六 | 21.0 | gz |
4 | 陈七 | 21.0 | gz |
df.fillna(method='bfill')
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | gz |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
df.fillna(method='backfill')
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | gz |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
# isnull()
df
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | NaN |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
df.isnull()
1
name | age | city | |
---|---|---|---|
0 | False | False | False |
1 | False | False | False |
2 | False | True | True |
3 | False | True | False |
4 | False | True | True |
# notnull()
df.notnull()
1
name | age | city | |
---|---|---|---|
0 | True | True | True |
1 | True | True | True |
2 | True | False | False |
3 | True | False | True |
4 | True | False | False |
df[df.notnull()]
1
name | age | city | |
---|---|---|---|
0 | 张三 | 20.0 | cd |
1 | 李四 | 21.0 | bj |
2 | 王五 | NaN | NaN |
3 | 赵六 | NaN | gz |
4 | 陈七 | NaN | NaN |
上次更新: 2023/11/01, 03:11:44