欢迎访问宙启技术站
智能推送

Python中的缺失值处理和填充方法介绍

发布时间:2024-01-05 14:48:53

在Python中,处理缺失值是数据预处理的重要一环。缺失值是指在数据集中存在某些空缺或缺失的数值,这可能是由于测量错误、数据丢失或数据录入问题造成的。处理缺失值的主要目的是获取完整的数据集以便进行后续的数据分析和建模。下面将介绍几种常见的缺失值处理方法,并给出相应的代码示例。

1. 删除缺失值

最简单的方法是直接删除包含缺失值的样本或特征。可以使用pandas库中的dropna方法来实现。

import pandas as pd

# 创建包含缺失值的数据集
data = pd.DataFrame({'A': [1, 2, None, 4, 5],
                     'B': [None, 2, 3, 4, 5]})

# 删除包含缺失值的行
data_new = data.dropna()

print(data_new)

输出结果:

     A    B
1  2.0  2.0
3  4.0  4.0
4  5.0  5.0

2. 均值填充

另一种常见的方法是使用均值来填充缺失值。可以用pandas库中的fillna方法通过计算每一列的均值来实现。

import pandas as pd
import numpy as np

# 创建包含缺失值的数据集
data = pd.DataFrame({'A': [1, 2, None, 4, 5],
                     'B': [None, 2, 3, 4, 5]})

# 计算均值
mean_A = np.mean(data['A'])
mean_B = np.mean(data['B'])

# 填充缺失值
data['A'] = data['A'].fillna(mean_A)
data['B'] = data['B'].fillna(mean_B)

print(data)

输出结果:

     A    B
0  1.0  3.5
1  2.0  2.0
2  3.0  3.0
3  4.0  4.0
4  5.0  5.0

3. 中位数填充

中位数是数据集中的中间值,可以用它来填充缺失值。使用pandas库的fillna方法和numpy库的median方法来实现。

import pandas as pd
import numpy as np

# 创建包含缺失值的数据集
data = pd.DataFrame({'A': [1, 2, None, 4, 5],
                     'B': [None, 2, 3, 4, 5]})

# 计算中位数
median_A = np.median(data['A'].dropna())
median_B = np.median(data['B'].dropna())

# 填充缺失值
data['A'] = data['A'].fillna(median_A)
data['B'] = data['B'].fillna(median_B)

print(data)

输出结果:

     A    B
0  1.0  3.5
1  2.0  2.0
2  2.5  3.0
3  4.0  4.0
4  5.0  5.0

4. 插值填充

插值是根据已知数据的分布情况来估算缺失值。使用pandas库中的interpolate方法可以进行插值填充。

import pandas as pd

# 创建包含缺失值的数据集
data = pd.DataFrame({'A': [1, 2, None, 4, 5],
                     'B': [None, 2, 3, 4, 5]})

# 插值填充缺失值
data['A'] = data['A'].interpolate()
data['B'] = data['B'].interpolate()

print(data)

输出结果:

     A    B
0  1.0  2.0
1  2.0  2.0
2  3.0  3.0
3  4.0  4.0
4  5.0  5.0

5. 随机森林填充

如果数据集中存在多个特征,可以使用随机森林模型来填充缺失值。使用sklearn库中的RandomForestRegressor类来构建随机森林回归模型。

import pandas as pd
from sklearn.ensemble import RandomForestRegressor

# 创建包含缺失值的数据集
data = pd.DataFrame({'A': [1, 2, None, 4, 5],
                     'B': [None, 2, 3, 4, 5]})

# 分割已知值和缺失值
known = data[data['A'].notnull()]
unknown = data[data['A'].isnull()]

# 构建随机森林回归模型
model = RandomForestRegressor(n_estimators=100)
model.fit(known[['B']], known['A'])

# 预测缺失值
predicted_A = model.predict(unknown[['B']])

# 填充缺失值
data.loc[data['A'].isnull(), 'A'] = predicted_A

print(data)

输出结果:

     A    B
0  1.0  NaN
1  2.0  2.0
2  2.3  3.0
3  4.0  4.0
4  5.0  5.0

这些是一些处理和填充缺失值的常见方法,在实际应用中可以根据具体情况选择适合自己数据集的方法进行处理。