一、缺失值处理
1. 查找缺失值
df.isnull()
:判断哪些元素有缺失值
df.isnull().any()
:判断哪些列有至少有一个缺失值,.any(axis=1)
判断行
df.isnull().all()
:判断哪些列全部都缺失值,.all(axis=1)
判断行
2. pandas处理缺失值
丢弃
df.dropna()
:直接丢弃含有缺失值的列,axis=1
丢弃行
填充
df.fillna(
value=None,
method=None,
axis=None,
inplace=False,
limit=None,
downcast=None,
)
- value:用来填充的内容
- 一个指定的值
- dict/Series/DataFrame:用序列中各列对应的值来填充对应列中的缺失值,如:
{'col1':1,'col2':2}
- 函数:
df.fillna(df.mean())
用平均值来填充,也可以是max()
、min()
等
- method:
{'backfill', 'bfill', 'pad', 'ffill', None}
- backfill/bfill:用后面的值填充
- pad/ffill:用前面的值填充
- limit:如果存在连续的缺失值,限制只填充指定数量的缺失值
- axis:0-列,1-行
3. sklearn处理缺失值
# 创建模型规则:用平均值填充
nan_model=SimpleImputer(missing_values=np.nan,strategy='mean')
# 创建模型规则:用常量填充
nan_model=SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0)
# 应用模型规则
nan_model.fit_transform(df)
SimpleImputer(
missing_values=nan,
strategy='mean',
fill_value=None,
verbose=0,
copy=True,
add_indicator=False,
)
- missing_values:缺失值,默认
np.nan
- strategy:填充方法
- mean:平均值
- median:中位数
- most_frequent:众数,出现最多的值
- constant:常量,需用
fill_value
来指定常量
- fill_value:用来填充的常量
若存在无穷大或无穷小的值,如
np.inf
或-np.inf
,mean
会失效,此时可以使用median
取中位数来处理
二、异常值处理
使用相应的规则或者方法判断出异常值,然后对异常值做出相应处理
df=pd.DataFrame(np.random.randint(0,100,20).reshape(5,4))
df
0 1 2 3
0 15 3 91 65
1 15 94 70 13
2 51 65 31 30
3 82 39 41 65
4 24 21 91 27
# 将小于20判断为异常值,判断存在异常值的行
(df<20).any(axis=1)
0 True
1 True
2 False
3 False
4 False
dtype: bool
# 移除存在异常值的行
df[~(df<20).any(axis=1)]
0 1 2 3
2 51 65 31 30
3 82 39 41 65
4 24 21 91 27
三、重复值处理
1. 判断重复
df.duplicated(
subset: Union[Hashable, Sequence[Hashable], NoneType] = None,
keep: Union[str, bool] = 'first',
) -> 'Series'
- subset:要判断重复值的列,可以是一列或多列,默认全部列
- keep:
{'first', 'last', False}
- first:除了第一个出现的以外,其余重复项均判断为True
- last:除了最后一个出现的以外,其余重复项均判断为True
- False:所有重复项均判断为True
2. 删除重复值
df.drop_duplicates(
subset: Union[Hashable, Sequence[Hashable], NoneType] = None,
keep: Union[str, bool] = 'first',
inplace: bool = False,
ignore_index: bool = False,
) -> Union[ForwardRef('DataFrame'), NoneType]
- ignore_index
- False:返回的结果中被删除数据对应的索引项缺失
- True:返回的结果中将重新按顺序生成连续的索引
np.unique()
和set()
可以返回唯一元素的集合