【基础】Python数据预处理技术详解
发布时间: 2024-06-24 18:15:11 阅读量: 80 订阅数: 136
数据预处理简单认识
1. Python数据预处理概述**
数据预处理是机器学习流程中至关重要的阶段,它旨在将原始数据转换为适合建模和分析的形式。Python凭借其丰富的库和工具,成为数据预处理的强大选择。本章将概述数据预处理的概念、重要性以及Python中常用的技术。
2. 数据清洗与转换**
数据清洗与转换是数据预处理的关键步骤,旨在将原始数据转换为适合建模和分析的形式。本章将深入探讨数据清洗和转换的技术,包括缺失值处理、异常值处理、数据类型转换、特征缩放、特征编码和特征选择。
2.1 数据清洗技术
2.1.1 缺失值处理
缺失值是数据集中常见的挑战,处理不当会影响模型的准确性和鲁棒性。常见的缺失值处理技术包括:
- **删除法:**删除包含缺失值的整个行或列。适用于缺失值较少且不影响数据完整性的情况。
- **均值/中位数填充:**用相应特征的均值或中位数填充缺失值。适用于缺失值随机分布且不影响数据分布的情况。
- **KNN 填充:**使用 K 个最近邻样本的平均值或中位数填充缺失值。适用于缺失值较多且与其他特征相关的情况。
代码示例:
- import pandas as pd
- # 删除包含缺失值的整个行
- df = df.dropna()
- # 用均值填充缺失值
- df['age'].fillna(df['age'].mean(), inplace=True)
- # 用 KNN 填充缺失值
- from sklearn.impute import KNNImputer
- imputer = KNNImputer(n_neighbors=5)
- df['age'] = imputer.fit_transform(df['age'].values.reshape(-1, 1))
2.1.2 异常值处理
异常值是极端值,可能扭曲数据分布并影响模型性能。处理异常值的方法包括:
- **删除法:**删除异常值样本。适用于异常值明显且不影响数据完整性的情况。
- **Winsorization:**将异常值截断到指定的分位数。适用于异常值数量较少且与其他特征相关的情况。
- **Z-score 标准化:**将异常值转换为 Z-score,使其与其他数据点一致。适用于异常值数量较多且不影响数据分布的情况。
代码示例:
- # 删除异常值样本
- df = df[~(df['age'] > 100)]
- # Winsorization
- df['age'] = df['age'].clip(lower=18, upper=80)
- # Z-score 标准化
- from sklearn.preprocessing import StandardScaler
- scaler = StandardScaler()
- df['age'] = scaler.fit_transform(df['age'].values.reshape(-1, 1))
2.1.3 数据类型转换
数据类型转换涉及将数据从一种类型转换为另一种类型,以满足建模或分析的需要。常见的转换包括:
- **数值型转换:**将字符型数据转换为数值型数据,如
int
、float
。 - **字符型转换:**将数值型数据转换为字符型数据,如
str
。 - **日期时间型转换:**将字符型日期时间数据转换为
datetime
类型。
代码示例:
- # 数值型转换
- df['age'] = pd.to_numeric(df['age'])
- # 字符型转换
- df['gender'] = df['gender'].astype('str')
- # 日期时间型转换
- df['date'] = pd.to_datetime(df['date'])
2.2 数据转换技术
2.2.1 特征缩放
特征缩放旨在将不同特征的值缩放到相同范围,以避免特征取值范围过大或过小对模型的影响。常见的缩放方法包括:
- **Min-Max 缩放:**将特征值缩放到 [0, 1] 区间。
- **标准化:**将特征值减去均值并除以标准差,使其均值为 0,标准差为 1。
代码示例:
- # Min-Max 缩放
- from sklearn.preprocessing import MinMaxScaler
- scaler = MinMaxScaler()
- df['age'] = scaler.fit_transform(df['age'].values.reshape(-1, 1))
- # 标准化
- from sklearn.preprocessing import StandardScaler
- scaler = StandardScaler()
- df['age
0
0