【进阶篇】数据清洗与预处理:缺失值处理与数据转换技巧
发布时间: 2024-06-24 18:41:37 阅读量: 83 订阅数: 109
![python数据分析与可视化合集](https://img-blog.csdnimg.cn/img_convert/ec1ddf98104cb073a60e4be1cc565029.png)
# 2.1 缺失值产生的原因和影响
缺失值在数据集中很常见,可能由各种原因造成:
* **数据收集错误:**在数据收集过程中,某些数据点可能未被正确记录或输入。
* **数据处理错误:**在数据处理过程中,某些数据点可能因格式不正确或其他错误而丢失。
* **数据源限制:**某些数据源可能无法提供某些数据点,例如受隐私或保密限制。
* **测量仪器故障:**在数据收集过程中,测量仪器可能出现故障或产生错误读数。
* **人为因素:**受访者或数据输入人员可能忘记或拒绝提供某些信息。
缺失值的存在会对数据分析和建模产生重大影响:
* **偏差:**缺失值可能会导致数据集的偏差,因为它们可能不均匀地分布在不同的数据点或群体中。
* **信息丢失:**缺失值会导致信息丢失,从而降低数据集的可用性。
* **模型性能下降:**缺失值会影响机器学习模型的性能,因为它们会引入噪声和不确定性。
# 2. 缺失值处理技巧
缺失值是数据清洗和预处理中常见的问题,它会对后续的数据分析和建模产生负面影响。本文将深入探讨缺失值产生的原因、影响以及处理方法,帮助您有效地处理缺失值问题。
### 2.1 缺失值产生的原因和影响
缺失值产生的原因多种多样,主要包括:
- **数据收集错误:**数据收集过程中,由于设备故障、人为失误等原因,导致部分数据缺失。
- **数据输入错误:**数据输入时,由于疏忽或错误,导致某些字段为空。
- **数据格式不一致:**不同数据源的数据格式不一致,导致某些字段无法正确解析。
- **数据类型转换错误:**数据类型转换时,由于转换规则不当,导致某些值被转换为缺失值。
缺失值会对数据分析和建模产生以下影响:
- **偏差:**缺失值的存在会导致数据分布发生变化,从而产生偏差。
- **准确性下降:**缺失值会降低数据的准确性,影响分析和建模结果的可靠性。
- **模型性能下降:**缺失值会影响机器学习模型的训练和预测性能。
### 2.2 缺失值处理方法
针对缺失值问题,有以下几种处理方法:
#### 2.2.1 删除缺失值
删除缺失值是最简单直接的方法,适用于以下情况:
- 缺失值比例较低(<5%)。
- 缺失值随机分布,不会对数据分布产生显著影响。
- 缺失值对后续分析和建模影响较小。
#### 2.2.2 填充缺失值
填充缺失值是指使用合理的方法估计缺失值,适用于以下情况:
- 缺失值比例较高(>5%)。
- 缺失值非随机分布,可能与其他变量相关。
- 缺失值对后续分析和建模影响较大。
常用的填充缺失值方法包括:
##### 2.2.2.1 均值填充
均值填充将缺失值填充为变量的均值。该方法适用于缺失值随机分布,且变量分布近似正态分布的情况。
```python
import numpy as np
# 原始数据
data = np.array([1, 2, np.nan, 4, 5])
# 均值填充
data[np.isnan(data)] = np.nanmean(data)
print(data)
# 输出:[1. 2. 3. 4. 5.]
```
##### 2.2.2.2 中位数填充
中位数填充将缺失值填充为变量的中位数。该方法适用于缺失值随机分布,且变量分布不近似正态分布的情况。
```python
import numpy as np
# 原始数据
data = np.array([1, 2, np.nan, 4, 5])
# 中位数填充
data[np.isnan(data)] = np.nanmedian(data)
print(data)
# 输出:[1. 2. 3. 4. 5.]
```
##### 2.2.2.3 众数填充
众数填充将缺失值填充为变量中出现次数最多的值。该方法适用于缺失值非随机分布,且变量取值离散的情况。
```python
import numpy as np
# 原始数据
data = np.array(['a', 'b', 'c', np.nan, 'a'])
# 众数填充
data[np.isnan(data)] = np.bincount(data).argmax()
print(data)
# 输出:['a', 'b', 'c', 'a', 'a']
```
##### 2.2.2.4 回归填充
回归填充使用回归模型预测缺失值。该方法适用于缺失值与其他变量相关,且变量分布复杂的情况。
```python
import pandas as pd
from sklearn.linear_model import LinearRegression
# 原始数据
data = pd.DataFrame({
'x': [1, 2, 3, 4, np.nan],
'y': [5, 6, 7, 8, 9]
})
# 回归填充
model = LinearRegression()
model.fit(data[['x']], data['y'])
data['x'].fillna(model.predict([[np.nan]]), inplace=True)
print(data)
# 输出:
# x y
# 0 1 5
# 1 2 6
# 2 3 7
# 3 4 8
# 4 5.5 9
```
### 2.3 缺失值处理实践
在实际应用中,缺失值处理需要根据具体
0
0