1. 缺失值处理
处理方式:
- 直接删除
- 填充缺失值
- 真值转换法
- 不处理 ( 数据分析和建模应用中很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理。常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯 )
pandas中用到的的api:
- dataframe.isnull() #判断是否有缺失值
- dataframe.dropna() #删除缺失值
- dataframe.fillna()#填充缺失值
示例代码:
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
# 生成一份缺失数据
# 生成一份数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1', 'col2', 'col3', 'col4'])
# 增加缺失值
df.iloc[1:2, 1] = np.NAN
df.iloc[4, 3] = np.nan # 上面两种写法都行
df
# 查看是否有缺失值
df.isnull()
# 获取含有NAN的列
nan_col1 = df.isnull().any()
# 获取全部为NAN的列
nan_col2 = df.isnull().all()
print(nan_col1)
print(nan_col2)
# 直接删除含有NaN的行的记录
df2 = df.dropna()
df2
#使用sklearn填充缺失值
nan_model = SimpleImputer(missing_values=np.nan, strategy='mean') # 建立替换规则:将值为NaN的缺失值以均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
nan_result
# 使用pandas填充缺失值
nan_result_pd1 = df.fillna(method='backfill') # 用后面的值替换缺失值
nan_result_pd1
# 使用pandas填充缺失值
nan_result_pd2 = df.fillna(method='bfill', limit=1) # 用后面的值替代缺失值,限制每列只能替代一个缺失值
nan_result_pd2
# 使用pandas填充缺失值
nan_result_pd3 = df.fillna(method='pad') # 用前面的值替换缺失值
nan_result_pd3
# 使用pandas填充缺失值
nan_result_pd4 = df.fillna(0) # 用0替换缺失值
nan_result_pd4
# 使用pandas填充缺失值
nan_result_pd5 = df.fillna({'col2': 1.1, 'col4': 1.2}) # 用不同值替换不同列的缺失值
nan_result_pd5
# 使用pandas填充缺失值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4']) # 用平均数代替,选择各自列的均值替换缺失值
nan_result_pd6
nan_result_pd6 = df.fillna(df.mean()) # 用平均数代替,选择各自列的均值替换缺失值
nan_result_pd6
2. 异常值处理
处理方式:
- 保留
- 删除
- 用统计量或预测量进行替换d
pandas中用到的api:
- dataframe.mean() #计算平局值
- dataframe.std() #计算标准差
示例代码:
import pandas as pd
# 生成异常数据
df = pd.DataFrame({'col1': [1, 120, 3, 5, 2, 12, 13],
'col2': [12, 17, 31, 53, 22, 32, 43]})
df
# 通过Z-Score方法判断异常值
df_zscore = df.copy() # 复制一个用来存储Z-score得分的数据框
cols = df.columns # 获得列表框的列名
for col in cols:
df_col = df[col] # 得到每一列的值
z_score = (df_col - df_col.mean()) / df_col.std() # 计算每一列的Z-score得分
df_zscore[col] = z_score.abs() > 2.2 # 判断Z-score得分是否大于2.2,如果是则是True,否则为False
df_zscore
# 删除异常值所在的行
df_drop_outlier = df[df_zscore['col1'] == False]
df_drop_outlier
3. 数据去重
pandas中用到的api:
- dataframe.duplicated() # 判断重复数据记录
- dataframe.drop_duplicates() # 删除数据记录中所有列值相同的记录
示例代码:
import pandas as pd # 导入pandas库
# 生成重复数据
data1, data2, data3, data4 = ['a', 3], ['b', 2], ['a', 3], ['c', 2]
df = pd.DataFrame([data1, data2, data3, data4], columns=['col1', 'col2'])
df
# 判断重复数据
isDuplicated = df.duplicated() # 判断重复数据记录
isDuplicated
# 删除重复值
# 删除数据记录中所有列值相同的记录
df1 = df.drop_duplicates()
df1
# 删除数据记录中col1值相同的记录
df2 = df.drop_duplicates(['col1'])
df2
# 删除数据记录中col2值相同的记录
df3 = df.drop_duplicates(['col2'])
df3
# 除数据记录中指定列(col1/col2)值相同的记录
df4 = df.drop_duplicates(['col1', 'col2'])
df4