Python 缺失值填充

Python 缺失值填充

Python 缺失值填充

引言

在数据分析和机器学习的过程中,经常会遇到缺失值的情况。缺失值指的是数据集中存在空白或者NaN(Not a Number)的情况。缺失值的出现可能是由于数据采集过程中的问题,或者是其他原因导致的。在处理缺失值时,我们需要选择一种适当的方法来填充这些空缺的数值,以确保数据分析和机器学习模型的准确性和可靠性。

本文将介绍常见的缺失值填充方法,并给出Python的示例代码和运行结果。

1. 删除缺失值

最简单的处理缺失值的方法是直接删除包含缺失值的样本(行)。当数据集中缺失值的比例较小,并且这些缺失值对于整体数据分析的影响较小时,删除缺失值是一个可行的选择。

下面是一个使用pandas库删除缺失值的示例代码:

import pandas as pd

# 创建包含缺失值的数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8],
        'C': [9, 10, 11, np.nan]}
df = pd.DataFrame(data)

# 删除包含缺失值的样本
df.dropna(inplace=True)

print(df)

运行结果:

     A    B     C
0  1.0  5.0   9.0

从运行结果可以看出,删除包含缺失值的样本后,只剩下了索引为0的一行数据。

需要注意的是,删除缺失值会改变原始数据集,并可能导致数据丢失。因此,在删除缺失值之前,需要仔细考虑缺失值的比例和对整体数据分析的影响。

2. 填充缺失值

除了删除缺失值,我们也可以选择填充缺失值。填充缺失值的方法有很多种,下面将介绍几种常见的方法。

2.1 常数填充

常数填充是一种简单的方法,即用一个常数值替换缺失值。这个常数值可以是0、均值、中位数、众数等。

下面是一个使用均值填充缺失值的示例代码:

import pandas as pd

# 创建包含缺失值的数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8],
        'C': [9, 10, 11, np.nan]}
df = pd.DataFrame(data)

# 使用均值填充缺失值
df.fillna(df.mean(), inplace=True)

print(df)

运行结果:

     A    B     C
0  1.0  5.0   9.0
1  2.0  6.7  10.0
2  2.3  7.0  11.0
3  4.0  8.0  10.0

从运行结果可以看出,缺失值被均值填充。

常数填充的优点是简单易用,但也存在一些问题。如果数据中存在大量的缺失值,使用常数填充可能导致填充后的数据失去原有的分布特性,从而影响数据分析和机器学习模型的准确性。

2.2 插值填充

插值填充是一种根据已有数据的规律,通过插值算法来填充缺失值的方法。常见的插值算法有线性插值、多项式插值、样条插值等。

下面是一个使用线性插值填充缺失值的示例代码:

import pandas as pd

# 创建包含缺失值的数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8],
        'C': [9, 10, 11, np.nan]}
df = pd.DataFrame(data)

# 使用线性插值填充缺失值
df.interpolate(method='linear', inplace=True)

print(df)

运行结果:

     A    B     C
0  1.0  5.0   9.0
1  2.0  6.0  10.0
2  3.0  7.0  11.0
3  4.0  8.0  11.0

从运行结果可以看出,缺失值被使用线性插值方法填充。

插值填充的优点是能够保持数据的分布特性,但也存在一些问题。插值方法可能受到异常值的影响,从而导致填充后的数据出现较大的偏差。

2.3 模型预测填充

模型预测填充是一种通过训练模型来预测缺失值的方法。常见的模型包括线性回归、决策树、随机森林等。

下面是一个使用随机森林模型预测填充缺失值的示例代码:

import pandas as pd
from sklearn.ensemble import RandomForestRegressor

# 创建包含缺失值的数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8],
        'C': [9, 10, 11, np.nan]}
df = pd.DataFrame(data)

# 拆分已知值和缺失值
known = df[df['C'].notnull()]
unknown = df[df['C'].isnull()]

# 创建随机森林模型
model = RandomForestRegressor()

# 训练模型并预测缺失值
model.fit(known[['A', 'B']], known['C'])
predicted = model.predict(unknown[['A', 'B']])

# 填充缺失值
df.loc[df['C'].isnull(), 'C'] = predicted

print(df)

运行结果:

     A    B     C
0  1.0  5.0   9.0
1  2.0  NaN  10.0
2  3.0  7.0  11.0
3  4.0  8.0  10.4

从运行结果可以看出,缺失值被使用随机森林模型预测填充。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程