【数据处理】python数据清洗通用手法:缺失值处理
生活随笔
收集整理的這篇文章主要介紹了
【数据处理】python数据清洗通用手法:缺失值处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
def missing_delete_var(df, threshold=None):"""df:數據集threshold:缺失率刪除的閾值return :刪除缺失后的數據集"""df2 = df.copy()missing_df = missing_cal(df)missing_col_num = missing_df[missing_df.missing_pct >= threshold].shape[0]missing_col = list(missing_df[missing_df.missing_pct >= threshold].col)df2 = df2.drop(missing_col, axis=1)return df2def missing_delete_user(df, threshold=None):"""df:數據集threshold:缺失個數刪除的閾值return :刪除缺失后的數據集"""df2 = df.copy()missing_series = df.isnull().sum(axis=1)missing_list = list(missing_series)missing_index_list = []for i, j in enumerate(missing_list):if j >= threshold:missing_index_list.append(i)df2 = df2[~(df2.index.isin(missing_index_list))]return df2def const_delete(df, col_list, threshold=None):"""df:數據集col_list:變量list集合threshold:同值化處理的閾值return :處理后的數據集"""df2 = df.copy()const_col = []for col in col_list:const_pct = df2[col].value_counts().iloc[0] / df2[df2[col].notnull()].shape[0]if const_pct >= threshold:const_col.append(col)df2 = df2.drop(const_col, axis=1)return df2def missing_cal(df):"""df :數據集return:每個變量的缺失率"""missing_series = df.isnull().sum() / df.shape[0]missing_df = pd.DataFrame(missing_series).reset_index()missing_df = missing_df.rename(columns={'index': 'col',0: 'missing_pct'})missing_df = missing_df.sort_values('missing_pct', ascending=False).reset_index(drop=True)return missing_dfdef data_processing(df, target):"""df:包含了label和特征的寬表return:df :清洗后的數據集"""# 特征缺失處理df = missing_delete_var(df, threshold=0.8)# 樣本缺失處理df = missing_delete_user(df, threshold=int(df.shape[1] * 0.8))col_list = [x for x in df.columns if x != target]# 常變量處理df = const_delete(df, col_list, threshold=0.9)desc = df.describe().T# 剔除方差為0的特征std_0_col = list(desc[desc['std'] == 0].index)if len(std_0_col) > 0:df = df.drop(std_0_col, axis=1)df.reset_index(drop=True, inplace=True)# 缺失值計算和填充miss_df = missing_cal(df)cate_col = list(df.select_dtypes(include=['O']).columns)num_col = [x for x in list(df.select_dtypes(include=['int64', 'float64']).columns) if x != 'label']# 分類型特征填充cate_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in cate_col]cate_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in cate_col]num_miss_col1 = [x for x in list(miss_df[miss_df.missing_pct > 0.05]['col']) if x in num_col]num_miss_col2 = [x for x in list(miss_df[miss_df.missing_pct <= 0.05]['col']) if x in num_col]for col in cate_miss_col1:df[col] = df[col].fillna('未知')for col in cate_miss_col2:df[col] = df[col].fillna(df[col].mode()[0])for col in num_miss_col1:df[col] = df[col].fillna(-999)for col in num_miss_col2:df[col] = df[col].fillna(df[col].median())return df, miss_df
??對數據分析、機器學習、數據科學、金融風控等感興趣的小伙伴,需要數據集、代碼、行業報告等各類學習資料,可添加微信:wu805686220(記得要備注喔!),也可關注微信公眾號:風控圏子(別打錯字,是圏子,不是圈子,算了直接復制吧!)
關注公眾號后,可聯系圈子助手加入如下社群:
- 機器學習風控討論群(微信群)
- 反欺詐討論群(微信群)
- python學習交流群(微信群)
- 研習社資料(qq群:102755159)(干貨、資料、項目、代碼、報告、課件)
相互學習,共同成長。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【数据处理】python数据清洗通用手法:缺失值处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【科技金融】CART树现金贷风控策略
- 下一篇: 【数据处理】python变量分箱常见手法