📌  相关文章
📜  检查 pandas 中的缺失值 - Python (1)

📅  最后修改于: 2023-12-03 15:26:43.569000             🧑  作者: Mango

检查 pandas 中的缺失值 - Python

在数据分析和处理的过程中,缺失值是一个常见的问题。Pandas 提供了多种方法来检查和处理缺失值。本篇文章将介绍 Pandas 中的缺失值检查方法,包括如下几个方面:

  1. 检查缺失值的方法
  2. 处理缺失值的方法
  3. 验证处理结果的方法
检查缺失值的方法
1. isnull()函数

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
2. notnull()函数

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
3. count()函数

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
处理缺失值的方法
1. 删除含有缺失值的行或列

Pandas 提供了 dropna()函数,用来删除含有缺失值的行或列。

  • axis 参数为 0 表示删除行,为 1 表示删除列,默认为 0。
  • how 参数为 'any' 表示任意一个或多个缺失值时,就删除该行或列;为 'all' 表示所有值均为缺失值时才删除该行或列。
  • inplace 参数为 True 表示在原 DataFrame 上删除;为 False 表示在新 DataFrame 上删除。
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
2. 填充缺失值

Pandas 提供了 fillna()函数,用来填充缺失值。

  • value 参数用来指定填充的值,可以是标量,字典,数组等。
  • method 参数用来指定填充的方法:ffill 或 pad 表示使用前面的值填充;bfill 或 backfill 表示使用后面的值填充。
  • axis 参数用来指定填充的方向:0 表示列,1 表示行。
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
验证处理结果的方法

经过缺失值处理之后,我们需要验证结果是否正确。

1. isnull()和 notnull()函数

可以使用 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
2. equals()函数

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 提供了多种方法来检查和处理缺失值,需要根据具体需求选择适合的方法。