1. 缺失值处理
处理方式:
pandas中用到的的api:
示例代码:
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.isnull()
# 获取含有NAN的列
nan_col1 = df.isnull().any()
# 获取全部为NAN的列
nan_col2 = df.isnull().all()
print(nan_col1)
print(nan_col2)
# 直接删除含有NaN的行的记录
df2 = df.dropna()
#使用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]})
# 通过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'])
# 判断重复数据
isDuplicated = df.duplicated() # 判断重复数据记录
isDuplicated
# 删除重复值
# 删除数据记录中所有列值相同的记录
df1 = df.drop_duplicates()
# 删除数据记录中col1值相同的记录
df2 = df.drop_duplicates(['col1'])
# 删除数据记录中col2值相同的记录
df3 = df.drop_duplicates(['col2'])
# 除数据记录中指定列(col1/col2)值相同的记录
df4 = df.drop_duplicates(['col1', 'col2'])