0
点赞
收藏
分享

微信扫一扫

【python数据分析】:数据预处理之缺失值处理

Go_Viola 2022-05-04 阅读 58

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

数据缺失主要包括记录缺失和字段信息缺失等情况,其对数据分析会有较大影响,导致结果不确定性更加显著。

缺失值的处理:


删除记录 / 数据填充|替换/ 不处理

判断是否有缺失值 - isnull()/notnull()

# isnull:缺失值为True,非缺失值为False# notnull:缺失值为False,非缺失值为True
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]})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

一起学习的小伙伴如果有什么想法或者意见,欢迎沟通~

举报

相关推荐

0 条评论