您的位置:

如何使用pandas删除数据表中的缺失值?

在数据分析和处理中,经常会遇到数据缺失的情况。数据缺失是常见的数据质量问题之一,因为缺失的数据可能会导致结果的偏差或不准确。Pandas是一个用于数据处理和分析的Python库,它提供了一些有用的函数来处理数据中的缺失值。本文将介绍如何使用pandas删除数据表中的缺失值。

一、选取含缺失值的数据表

在开始之前,我们需要一个含缺失值的数据表来进行调试和演示。下面是一个包含缺失值的数据表:


import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [25, 20, np.nan, 30, 35],
        'gender': ['F', 'M', np.nan, 'M', 'F'],
        'score': [80, 75, 85, 90, np.nan]}
df = pd.DataFrame(data)
print(df)

运行以上代码会输出以下结果:


       name   age gender  score
0     Alice  25.0      F   80.0
1       Bob  20.0      M   75.0
2   Charlie   NaN    NaN   85.0
3     David  30.0      M   90.0
4      Ella  35.0      F    NaN

可以看到,数据表中共有4个缺失值。下面我们将介绍如何使用Pandas来删除这些缺失值。

二、删除缺失值

1. 删除有缺失值的行或列

在 pandas 中,最简单的删除缺失值的方法是简单地将缺失值所在的行或列删除。可以使用 dropna() 函数来实现。默认情况下,dropna() 函数会删除任何包含缺失值的行。


# 删除含有缺失值的行
df1 = df.dropna()
# 删除含有缺失值的列
df2 = df.dropna(axis=1)

其中,参数 axis=1 表示删除含有缺失值的列。

删除行操作的结果:


     name   age gender  score
0   Alice  25.0      F   80.0
1     Bob  20.0      M   75.0
3   David  30.0      M   90.0

删除列操作的结果:


      name
0    Alice
1      Bob
2  Charlie
3    David
4     Ella

可以看到,行中含有缺失值的全部被删除了。

2. 只删除全部为缺失值的行或列

除了删除含有缺失值的行或列之外,Pandas 还提供了一种方法可以只删除全部为缺失值的行或列。可以使用 dropna() 函数的参数 how='all' 来实现。如果使用了这个参数,dropna() 函数只会删除全部为缺失值的行或列。


# 删除全部为缺失值的行
df3 = df.dropna(how='all')
# 删除全部为缺失值的列
df4 = df.dropna(axis=1, how='all')

删除行操作的结果:


      name   age gender  score
0    Alice  25.0      F   80.0
1      Bob  20.0      M   75.0
2  Charlie   NaN    NaN   85.0
3    David  30.0      M   90.0
4     Ella  35.0      F    NaN

删除列操作的结果:


       name   age gender  score
0     Alice  25.0      F   80.0
1       Bob  20.0      M   75.0
2   Charlie   NaN    NaN   85.0
3     David  30.0      M   90.0
4      Ella  35.0      F    NaN

可以看到,在行和列中只删除了全部为缺失值的那一行或列。

3. 删除任意一行或列中包含缺失值的数据

除了只删除全部为缺失值的行或列之外,Pandas 还提供了一种方法可以删除任意一行或列中包含缺失值的数据。可以使用 dropna() 函数的参数 thresh=n 来实现。如果使用了这个参数,dropna() 函数将只保留至少包含 n 个非缺失值的行或列。也就是说,如果某一行或列中缺失值的数量超过了 n-1 个,那么这一行或列也会被删除。


# 删除至少含有 3 个缺失值的行
df5 = df.dropna(thresh=2)
# 删除至少含有 2 个缺失值的列
df6 = df.dropna(axis=1, thresh=4)

删除行操作的结果:


      name   age gender  score
0    Alice  25.0      F   80.0
1      Bob  20.0      M   75.0
3    David  30.0      M   90.0
4     Ella  35.0      F    NaN

删除列操作的结果:


      name  score
0    Alice   80.0
1      Bob   75.0
2  Charlie   85.0
3    David   90.0
4     Ella    NaN

可以看到,在满足条件的情况下,只删除了含有缺失值的那些行或列。

三、填充缺失值

除了删除缺失值之外,有时候也需要填充缺失值。可以使用 fillna() 函数来实现缺失值的填充。一般来说,可以设置一个值或使用某种算法填充缺失值。

1. 使用一个固定的值填充缺失值

最简单的填充方法是使用一个固定的值来填充所有的缺失值。可以使用 fillna() 函数,并传入一个指定的数字或字符串。


# 使用固定值来填充缺失值
df7 = df.fillna(0)

填充操作的结果:


      name   age gender  score
0    Alice  25.0      F   80.0
1      Bob  20.0      M   75.0
2  Charlie   0.0      0   85.0
3    David  30.0      M   90.0
4     Ella  35.0      F    0.0

可以看到,缺失值都被填充为了指定的数字 0。

2. 使用平均数或中位数填充缺失值

除了使用固定值外,还可以使用一些算法来填充缺失值,例如平均值、中位数、插值等。使用 fillna() 函数的参数来传入指定的算法。


# 使用平均数填充 "age" 列的缺失值
df8 = df.fillna({'age': df['age'].mean()})
# 使用中位数填充 "score" 列的缺失值
df9 = df.fillna({'score': df['score'].median()})

填充操作的结果:


      name   age gender  score
0    Alice  25.0      F   80.0
1      Bob  20.0      M   75.0
2  Charlie  27.5    NaN   85.0
3    David  30.0      M   90.0
4     Ella  35.0      F   82.5

可以看到,缺失值都被填充为了指定算法所计算得到的结果。

3. 使用插值算法填充缺失值

除了使用平均值和中位数之外,还可以使用插值算法来填充缺失值。插值是一种对数据进行预测的技术,它可以在缺少数据的情况下预测缺失值。Pandas 提供了 interpolate() 函数来进行插值。


# 使用插值算法填充缺失值
df10 = df.interpolate()

填充操作的结果:


      name    age gender  score
0    Alice  25.00      F  80.00
1      Bob  20.00      M  75.00
2  Charlie  23.33    NaN  85.00
3    David  30.00      M  90.00
4     Ella  35.00      F  87.50

可以看到,在使用插值算法填充之后,缺失值的分布更加接近真实值。

四、总结

本文介绍了如何使用 Pandas 删除数据表中的缺失值。我们讨论了三种删除缺失值的方法:删除行和列、删除全部为缺失值的行和列、删除任意一行或列中包含缺失值的数据。我们还介绍了如何填充缺失值,包括使用固定值、平均数、中位数和插值算法来填充缺失值。这些方法可以帮助我们更好地处理数据缺失问题。