📅  最后修改于: 2023-12-03 15:26:43.569000             🧑  作者: Mango
在数据分析和处理的过程中,缺失值是一个常见的问题。Pandas 提供了多种方法来检查和处理缺失值。本篇文章将介绍 Pandas 中的缺失值检查方法,包括如下几个方面:
isnull()函数用来检查数据中的缺失值(NaN)。该函数返回一个布尔值的数组,数组的大小和所检查的数据大小一致,缺失值为 True,其余值为 False。
import pandas as pd
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 检查 DataFrame 中的缺失值
print(df.isnull())
输出:
A B C
0 False False False
1 False True False
2 True True False
notnull()函数是 isnull()函数的反向方法。该函数同样返回一个布尔值的数组,但是如果缺失值为 False,其他值为 True。
import pandas as pd
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 检查 DataFrame 中的非缺失值
print(df.notnull())
输出:
A B C
0 True True True
1 True False True
2 False False True
count()函数返回每列中非缺失值的数量。
import pandas as pd
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 返回每列中非缺失值的数量
print(df.count())
输出:
A 2
B 1
C 3
dtype: int64
Pandas 提供了 dropna()函数,用来删除含有缺失值的行或列。
import pandas as pd
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 删除含有缺失值的行
print(df.dropna())
# 删除含有缺失值的列
print(df.dropna(axis=1))
# 只删除全部为缺失值的行
print(df.dropna(how='all'))
# 在原 DataFrame 上删除
df.dropna(inplace=True)
print(df)
输出:
C
0 7.0
删除了 B 列
A C
0 1.0 7.0
1 2.0 8.0
2 NaN 9.0
删除了第二行
A B C
0 1.0 4.0 7
有所改动的原 DataFrame
C
0 7.0
Pandas 提供了 fillna()函数,用来填充缺失值。
import pandas as pd
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 用 0 填充缺失值
print(df.fillna(0))
# 用前面的值填充
print(df.fillna(method='ffill'))
# 用后面的值填充
print(df.fillna(method='bfill'))
# 用指定的值填充指定的列
print(df.fillna({'B': 0}))
输出:
A B C
0 1.0 4.0 7.0
1 2.0 0.0 8.0
2 0.0 0.0 9.0
A B C
0 1.0 4.0 7.0
1 2.0 4.0 8.0
2 2.0 4.0 9.0
A B C
0 1.0 4.0 7.0
1 2.0 8.0 8.0
2 NaN NaN 9.0
A B C
0 1.0 4.0 7
1 2.0 0.0 8
2 NaN 0.0 9
经过缺失值处理之后,我们需要验证结果是否正确。
可以使用 isnull()和 notnull()函数,确保删除或填充后不再存在缺失值。
import pandas as pd, numpy as np
# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 删除含有缺失值的行
df.dropna(inplace=True)
# 验证结果是否正确
print(df.isnull().any().any())
输出:
False
equals()函数用来比较原 DataFrame 和删除或填充后的 DataFrame 是否相同。
import pandas as pd, numpy as np
# 创建一个包含缺失值的 DataFrame
df1 = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, np.nan], 'C': [7, 8, 9]})
# 在新的 DataFrame 中填充缺失值
df2 = df1.fillna(0)
# 验证结果是否正确
print(df1.equals(df2))
输出:
False
本篇文章介绍了 Pandas 中的缺失值检查和处理方法,并给出了一些实例代码。在数据分析和处理的过程中,缺失值是一个常见的问题,了解如何检查和处理缺失值是非常重要的。Pandas 提供了多种方法来检查和处理缺失值,需要根据具体需求选择适合的方法。