pandas (十) 缺失值的处理:填充、删除、过滤、查询

Pandas使用函数处理缺失值
  • isnull和notnull:检测是否是空值,可用于df和series
  • dropna:丢弃、删除余缺失值
    axis: 删除行还是列,{0 or ‘index’, 1 or ‘columns’), default 0
    how: 如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
    inplace:如果为True则修改当前df,否则返回新的df
    • fillna:填充空值
    value:用于填充的值,可以是单个值,或者宇典(key是列名,value是值)
    method:等于ffill使用前一个不为空的值填充forword fill;等于bfill使用后一个不为空的值填
    充backword fill
    axis : 按行还是列填充,1 or index’, 1 or 'columns
    inplace :如果为True则修改当前df,否则返回新的df
  • 读取excel,忽略前几行空行

    import pandas as pd
    df = pd.read_excel(fpath, skiprows=2)  skiprows=2 略过前两行
    
        Unnamed: 0   姓名   科目    分数
    0          NaN  小明   语文  85.0
    1          NaN  NaN   数学  80.0
    2          NaN  NaN   英语  90.0
    3          NaN  NaN   NaN   NaN
    4          NaN  小王   语文  85.0
    5          NaN  NaN   数学   NaN
    6          NaN  NaN   英语  90.0
    7          NaN  NaN   NaN   NaN
    8          NaN  小刚   语文  85.0
    9          NaN  NaN   数学  80.0
    10         NaN  NaN   英语  90.0
    
  • 检测空值

    df.isnull()           检测每一个的值是否为空值
    df['分数'].isnull()    检测每个人的分数是否为空值
    df['分数'].notnull()    检测每个人的分数是否不为空值
    0      True
    1      True
    2      True
    3     False
    4      True
    5     False
    6      True
    7     False
    8      True
    9      True
    10     True
    Name: 分数, dtype: bool
    
    获取分数不为空的所有行
    df.loc[df['分数'].notnull(), :]
    
    	Unnamed: 0	姓名	科目	分数
    0	NaN	小明	语文	85.0
    1	NaN	NaN	数学	80.0
    2	NaN	NaN	英语	90.0
    4	NaN	小王	语文	85.0
    6	NaN	NaN	英语	90.0
    8	NaN	小刚	语文	85.0
    9	NaN	NaN	数学	80.0
    10	NaN	NaN	英语	90.0
    
  • 删除全部是空值的列

    按列删除:   axis='columns'
    均为None:  how='all'  
    直接修改df:inplace=True
    df.dropna(axis='columns', how='all', inplace=True)
    
    姓名	科目	分数
    0	小明	语文	85.0
    1	NaN	数学	80.0
    ...
    8	小刚	语文	85.0
    9	NaN	数学	80.0
    
  • 删除全部是空值的行

    按行删除:   axis='index'
    均为None:  how='all'  
    直接修改df:inplace=True
    df.dropna(axis='index', how='all', inplace=True)
    
    姓名	科目	分数
    0	小明	语文	85.0
    1	NaN	数学	80.0
    5	NaN	数学	NaN
    ...
    8	小刚	语文	85.0
    9	NaN	数学	80.0
    
  • 将分数为空的填充为0分

    方式一: df.fillna({
          
          "分数": 0})
    方式二: df.loc[:, '分数'] = df['分数'].fillna(0)
    
    	姓名	科目	分数
    0	小明	语文	85.0
    1	NaN	数学	80.0
    2	NaN	英语	90.0
    4	小王	语文	85.0
    5	NaN	数学	0.0
    6	NaN	英语	90.0
    8	小刚	语文	85.0
    9	NaN	数学	80.0
    10	NaN	英语	90.0
    
  • 将姓名的缺失值填充: 使用前面的有效值填充,用ffill: forward fill

    加入姓名空了,使用前一个姓名不为空的填充
    df.loc[:, '姓名'] = df['姓名'].fillna(method='ffill')
    
  • 将清晰好的数据保存到excle中

    fpath = '/Users/python/Desktop/means/ml-25m/student_clear_excel.xlsx'
    df.to_excel(fpath, index=False) # 系统自己生成索引不写入excel中
    

猜你喜欢

转载自blog.csdn.net/a6864657/article/details/131501277
今日推荐