【Python】4000字归纳总结 Pandas+Sklearn 带你做数据预处理
加载数据 处理缺失值如何处理 处理离散型数据该如何处理 数据的标准化 将数据集划分成训练集与测试集 去掉重复值
加载数据
我们导入必要的库并且加载数据
import pandas as pd
df = pd.read_csv("data.csv")
在进行数据分析前,可以查看一下数据的总体情况,从宏观上了解数据
data.head() #显示前五行数据
data.tail() #显示末尾五行数据
data.info() #查看各字段的信息
data.shape #查看数据集有几行几列,data.shape[0]是行数,data.shape[1]是列数
data.describe() #查看数据的大体情况,均值,最值,分位数值...
data.columns.tolist() #得到列名的list
处理缺失值
data = [['小明',25,55],['小红',28,60],['小王',26]]
df = pd.DataFrame(data=data,columns=['Name','Age','Weight'])
output
Name Age Weight
0 小明 25 55.0
1 小红 28 60.0
2 小王 26 NaN
针对上面的数据集,我们通过pandas
中的方法看一下缺失值的情况
df.isnull()
output
Name Age Weight
0 False False False
1 False False False
2 False False True
另外我们也可以这么来做,检测每一列空值的数量
df.isnull().sum()
output
Name 0
Age 0
Weight 1
dtype: int64
而在面对缺失值的时候,我们一方面可以将其去除
df.dropna()
output
Name Age Weight
0 小明 25 55.0
1 小红 28 60.0
当然我们也可以对缺失值进行填充,例如用平均值来填充
df.fillna(df.mean())
output
Name Age Weight
0 小明 25 55.0
1 小红 28 60.0
2 小王 26 57.5
除了pandas
当中的方法之外,我们也可以使用sklearn
库当中的一些函数方法,例如
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(df[['Weight']])
df['Weight'] = imputer.transform(df[['Weight']])
fillna()
方法返回的结果一致,我们用平均值来代码空值,那么同样道理我们也可以用中位数、众数等统计值来进行替换,这里就不做多说处理离散型数据
df_cat = pd.DataFrame(data =
[['green','M',10.1,'class1'],
['blue','L',20.1,'class2'],
['white','M',30.1,'class1']], )
df_cat.columns = ['color','size','price','classlabel']
output
color size price classlabel
0 green M 10.1 class1
1 blue L 20.1 class2
2 white M 30.1 class1
对于有序的离散型变量,我们可以使用map()
函数
size_mapping = {'M':1,'L':2}
df_cat['size'] = df_cat['size'].map(size_mapping)
df_cat['size']
output
0 1
1 2
2 1
Name: size, dtype: int64
另外我们也可以使用sklearn
库中的LabelEncoder()
方法来处理
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
df_cat['size'] = class_le.fit_transform(df_cat['size'].values)
color
这一列进行编码过之后会有color_green
、color_blue
以及color_white
三个特征,特征值为0或者1pd.get_dummies(df_cat['color'], prefix = "color")
output
color_blue color_green color_white
0 0 1 0
1 1 0 0
2 0 0 1
然后我们将此并入到源数据当中去
df_cat[["size", "price"]].join(dummies)
output
size price color_blue color_green color_white
0 1 10.1 0 1 0
1 2 20.1 1 0 0
2 1 30.1 0 0 1
color
这一列中存在三种颜色,分别是blue
、green
以及white
,当前两类取值都为0的时候,color
只可能是white
所以将get_dummies()
方法中的drop_first
默认值为False
改为True
dummies = pd.get_dummies(df_cat['color'], prefix = "color", drop_first=True)
df_cat[["size", "price"]].join(dummies)
数据的标准化
z-score 标准化
sklearn
库当中的代码则是from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
线性归一化
它的计算公式为: = 当然sklearn
库当中也有相对应的代码
from sklearn.preprocessing import MinMaxScaler()
min_max_scaler = MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)
训练集中的数据经过转化,取值范围都集中在[0,1]之间
MaxAbsScaler()
方法
MaxAbsScaler()
方法和上述的线性归一化效果相类似,训练集中的数据经过转化,取值范围在[-1,1]之间max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
X_test_maxabs = max_abs_scaler.transform(X_test)
RobustScaler()
方法
RobustScaler()
方法,from sklearn.preprocessing import RobustScaler
transformer = RobustScaler().fit(X)
transformer.transform(X)
将数据集划分成训练集和测试集
sklearn
库中也有相对应的方法from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2,random_state= 1)
上面的变量y
具体指的是被预测的因变量,而x
则是在预测中使用的自变量
去除重复值
在pandas
当中也有对应的方法来去除掉重复值
df.drop_duplicates()
另外小编之前也写过一篇数据预处理的文章,大家有兴趣的可以去看一下
往期精彩回顾 本站qq群554839127,加入微信群请扫码:
评论