机器学习常用数据清洗方法

最近做机器学习的项目,汇总一下用得比较多的数据清洗方法,主要有:重新命名列名、去除空值、去除0值(或负值)、过采样、下采样
1.重新命名列名
平时读数据的时候,原始数据总是有各种乱七八糟的命名,可以通过命名便于理解
第一种方法:直接按顺序修改,替换掉原始的columns

df=pd.read_csv(r'E:\00learning\01Python\机器学习\04SVR\train_data.csv')
df.columns=['I','F']#重新命名列名

第二种方法:
使用.rename()函数

df.rename(columns={'我是原始名字':'我是新名字'})

2.去除空值
数据集中,一般情况下,一个样本的特征值都是一 一对应的,那么删掉含有空值的数据,直接就要删掉整行了,也就是删掉了这个样本的数据。
使用.dropna()函数:
axis=0代表删除含有空值的行
axis=1代表删除含有空值的列
how='any’代表只要有空值就删掉
上代码:

df.dropna(axis=0,how='any')

3.去除0值
这里直接使用判断语句,其实可以直接去掉负值、0值,或者自选一个范围都可以
上代码:

df=df[df['I']>5]
df=df[df['F']>5]

4.过采样
当数据集中样本比例不均衡时可以使用过采样的方法,常用SMOTE算法来进行过采样,使用方法:
(1)原始数据如下:
可以看出原始数据分布不均

import numpy as np
import pandas as pd
from collections import Counter
data=pd.read_csv(r'E:\00learning\01Python\机器学习\比赛\信用卡盗刷风险\creditcard.csv')
data=np.array(data)
labels=data[:,-1]
print(Counter(labels))

out:   Counter({0.0: 284315, 1.0: 492})#数据类别分布不均

(2)使用SMOTE算法过采样:

from imblearn.over_sampling import SMOTE
smo=SMOTE(random_state=0)
features_smo,labels_smo=smo.fit_resample(features,labels)
print(Counter(labels_smo))

out: Counter({0.0: 284315, 1.0: 284315})

过采样以后正反例数量相同
(3)过采样比例设置
有时候我们不希望比例是完整的1:1,那么可以手动设定过采样的比例:

num_0=list(labels).count(0)#获取标签为0的个数
smo=SMOTE(sampling_strategy=0.5,random_state=0)
features_smo,labels_smo=smo.fit_resample(features,labels)
print(Counter(labels_smo))

out:Counter({0.0: 284315, 1.0: 142157})

你可能感兴趣的:(pandas,数据分析,机器学习)