第5章 预处理理论

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

5.1、数据清洗

5.1.1 数据样本抽样

·         样本要具有代表性

·         样本比例要平衡以及样本不均衡时如何处理

·         考虑全量数据

5.1.2异常值(空值)处理

·         识别异常值和重复值
     Pandasisnull()/duplicated()----判断是否有重复的项

·         直接丢弃(包括重复数据)
     Pandasdrop()/dropna()/drop_duplicated()

·         把异常当作一个新的属性,替代原值
     Pandasfillna()

·         集中值指代
     Pandasfillna()

·         边界值指代
     Pandasfillna()

·         插值
     Pandasinterpolate() --- 针对于Series

      若插入值是位于首部,则插入第二个数的数值大小;

      若插入值是位于尾部,则插入倒数第二个数的数值大小;

      若插入值位于中部,则取前后两数的平均值;

import numpy as np
import pandas as pd
df = pd.DataFrame({'A':['a0','a1','a1','a2','a3','a4'],
                   'B':['b0','b1','b2','b2','b3',None],
                   'C':[1,2,None,3,4,5],
                   'D':[0.1,10.2,11.4,8.9,9.1,12],
                   'E':[10,19,32,25,8,None],
                   'F':['f0','f1','g2','f3','f4','f5']})
print(df)
# print(df.duplicated())
#删除空值所在行
# df = df.dropna()
#删除某一属性的空值
df = df.dropna(subset=['B'])
#删除重复数所在的行,保留第一个(默认),last为保留最后一个
df = df.drop_duplicates('A',keep='first')
df['B'] = df.fillna('b*')
#插值只能对Series进行处理
df['E'] = df['E'].interpolate()
upper_q = df['D'].quantile(q=0.75)
lower_q = df['D'].quantile(q=0.25)
k = 1.5
q_int = upper_q - lower_q
df = df[df['D'] < upper_q + k * q_int][df["D"] > lower_q - k * q_int]
# print(pd.Series([1,None,9,16,25]).interpolate())
print(df)
#要求F列必须以f开头
df[[True if item.startswith('f') else False for item in list(df['F'].values)]]
print(df)
'''
结果:
A B C D E F
1 a1 a1 2.0 10.2 19.0 f1
3 a2 a2 3.0 8.9 25.0 f3
4 a3 a3 4.0 9.1 8.0 f4
'''

  

猜你喜欢

转载自www.cnblogs.com/Cheryol/p/11423573.html