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中