在数据分析和处理中,经常会遇到数据缺失的情况。数据缺失是常见的数据质量问题之一,因为缺失的数据可能会导致结果的偏差或不准确。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 删除数据表中的缺失值。我们讨论了三种删除缺失值的方法:删除行和列、删除全部为缺失值的行和列、删除任意一行或列中包含缺失值的数据。我们还介绍了如何填充缺失值,包括使用固定值、平均数、中位数和插值算法来填充缺失值。这些方法可以帮助我们更好地处理数据缺失问题。