•本文字数:约1300字•阅读时长:约2分钟•难度:2颗星

数据缺失主要包括记录缺失和字段信息缺失等情况,其对数据分析会有较大影响,导致结果不确定性更加显著。
缺失值的处理:
删除记录 / 数据填充|替换/ 不处理

判断是否有缺失值 - isnull()/notnull()
# isnull:缺失值为True,非缺失值为False# notnull:缺失值为False,非缺失值为Trues = pd.Series([1,np.nan,np.nan,2,3,np.nan,4])df = pd.DataFrame({'value1':[1,np.nan,np.nan,2,3,np.nan,4],'value2':['a','b','c',np.nan,'e','f',np.nan]})print(s.isnull()) # Series直接判断是否是缺失值,返回一个Seriesprint(df.notnull()) # Dataframe直接判断是否是缺失值,返回一个Seriesprint(df['value1'].notnull()) # 通过索引判断print('------')# 筛选非缺失值s2 = s[s.isnull() == False]df2 = df[df['value2'].notnull()] # 注意和 df2 = df[df['value2'].notnull()] ['value1'] 的区别print(s2)print(df2)
0 False 1 True 2 True 3 False 4 False 5 True 6 False dtype: bool value1 value2 0 True True 1 False True 2 False True 3 True False 4 True True 5 False True 6 True False 0 True 1 False 2 False 3 True 4 True 5 False 6 True Name: value1, dtype: bool ------ 0 1.0 3 2.0 4 3.0 6 4.0 dtype: float64 value1 value2 0 1.0 a 1 NaN b 2 NaN c 4 3.0 e 5 NaN f

删除缺失值 - dropna
s = pd.Series([1,np.nan,np.nan,2,3,np.nan,4])df = pd.DataFrame({'value1':[1,np.nan,np.nan,2,3,np.nan,4],'value2':['a','b','c',np.nan,'e','f',np.nan]})# drop方法:可直接用于Series,Dataframe# 注意inplace参数,默认False → 生成新的值s.dropna(inplace = True)df2 = df['value1'].dropna()print(s)print(df2)
0 1.0 3 2.0 4 3.0 6 4.0 dtype: float64 0 1.0 3 2.0 4 3.0 6 4.0 Name: value1, dtype: float64

# 填充/替换缺失数据 - fillna、replace
s = pd.Series([1,np.nan,np.nan,2,3,np.nan,4])df = pd.DataFrame({'value1':[1,np.nan,np.nan,2,3,np.nan,4],'value2':['a','b','c',np.nan,'e','f',np.nan]})# s.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)# value:填充值# 注意inplace参数s.fillna(0,inplace = True)print(s)print('------')# method参数:# pad / ffill → 用之前的数据填充 /向下填充# backfill / bfill → 用之后的数据填充 /向上填充df['value1'].fillna(method = 'pad',inplace = True)print(df)print('------')0 1.0 1 0.0 2 0.0 3 2.0 4 3.0 5 0.0 6 4.0 dtype: float64 ------ value1 value2 0 1.0 a 1 1.0 b 2 1.0 c 3 2.0 NaN 4 3.0 e 5 3.0 f 6 4.0 NaN ------
# df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)# to_replace → 被替换的值# value → 替换值s = pd.Series([1,np.nan,np.nan,2,3,np.nan,4])s.replace(np.nan,'缺失数据',inplace = True)print(s)print('------')# 多值用np.nan代替s.replace([1,2,3],np.nan,inplace = True)print(s)
0 1.0 1 缺失数据 2 缺失数据 3 2.0 4 3.0 5 缺失数据 6 4.0 dtype: object ------ 0 NaN 1 缺失数据 2 缺失数据 3 NaN 4 NaN 5 缺失数据 6 4.0 dtype: object
一起学习的小伙伴如果有什么想法或者意见,欢迎沟通~











