60_Pandas中是否包含判断缺失值NaN并统计个数

60_Pandas中是否包含判断缺失值NaN并统计个数

下面介绍如何判断pandas.DataFrame、Series是否包含缺失值NaN以及如何统计缺失值NaN的个数。

  • 使用 isnull()、isna() 确定每个元素的缺失值
  • 判断每一行/列的所有元素是否缺失值
  • 判断每一行/列是否至少包含一个缺失值
  • 计算每行/列的缺失值
  • 计算每行/列的非缺失元素的数量
  • 计算缺失值总数
  • 计算非缺失元素的总数
  • 判断整体是否至少有一个缺失值
  • pandas.Series

使用 read_csv() 读取包含空白的 CSV 文件。仅使用前三行。

import pandas as pd

df = pd.read_csv('data/sample_pandas_normal_nan.csv')[:3]
print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
  • 使用 isnull()、isna() 确定每个元素的缺失值
    如果值为 NaN,则值为 True,如果不是,则值为 False。
print(df.isnull())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

print(df.isna())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True

isnull() 是 isna() 的别名,两者用法相同。之后主要是用isnull(),不过可以用isna()代替。

相反,如果值不是 NaN,则有方法 notnull() 和 notna() 返回 True,如果值缺失则返回 False。 notnull() 是 notna() 的别名,两者用法相同。

print(df.notnull())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

print(df.notna())
#     name    age  state  point  other
# 0   True   True   True  False  False
# 1  False  False  False  False  False
# 2   True  False   True  False  False

注意,对于缺失值 NaN,== 返回 False 而 != 对所有值(包括 NaN 本身)返回 True。请注意,== 和 != 无法检测缺失值。

print(df == float('nan'))
#     name    age  state  point  other
# 0  False  False  False  False  False
# 1  False  False  False  False  False
# 2  False  False  False  False  False

print(df != float('nan'))
#    name   age  state  point  other
# 0  True  True   True   True   True
# 1  True  True   True   True   True
# 2  True  True   True   True   True

  • 判断每一行/列的所有元素是否缺失值
    all() 是一种方法,如果每行/列中的所有元素都为真,则确定为真。从 pandas.DataFrame 调用时返回 pandas.Series。

通过将 all() 应用于 isnull() 的结果,可以确定每行和每列的所有元素是否都是缺失值 NaN。

默认情况下为列,参数为 axis=1 的行。

print(df.isnull().all())
# name     False
# age      False
# state    False
# point     True
# other     True
# dtype: bool

print(df.isnull().all(axis=1))
# 0    False
# 1     True
# 2    False
# dtype: bool
  • 判断每一行/列是否至少包含一个缺失值
    any() 是一种确定 True 的方法,如果每行/列甚至有一个 True。从 pandas.DataFrame 调用时返回 pandas.Series。
print(df.isnull().any())
# name     True
# age      True
# state    True
# point    True
# other    True
# dtype: bool

print(df.isnull().any(axis=1))
# 0    True
# 1    True
# 2    True
# dtype: bool
  • 计算每行/列的缺失值
    sum() 是一种计算每行/列总数的方法。从 pandas.DataFrame 调用时返回 pandas.Series。

由于sum()被处理为True=1,False=0,通过对isnull()的结果应用sum(),我们可以统计每行和每列缺失值NaN的个数。

默认情况下为列,参数为 axis=1 的行。

print(df.isnull().sum())
# name     1
# age      2
# state    1
# point    3
# other    3
# dtype: int64

print(df.isnull().sum(axis=1))
# 0    2
# 1    5
# 2    3
# dtype: int64
  • 计算每行/列的非缺失元素的数量
    count() 是一种方法,它计算每一行/列中不属于缺失值 NaN 的元素的数量。从 pandas.DataFrame 调用时返回 pandas.Series。

直接从原始 pandas.DataFrame 调用它,而不是 isnull() 的结果。

默认情况下为列,参数为 axis=1 的行。

print(df.count())
# name     2
# age      1
# state    2
# point    0
# other    0
# dtype: int64

print(df.count(axis=1))
# 0    3
# 1    0
# 2    2
# dtype: int64
  • 计算缺失值总数
    可以通过pandas.DataFrame的values属性获取整个元素的数据作为NumPy数组numpy.ndarray。
print(df.isnull().values)
# [[False False False  True  True]
#  [ True  True  True  True  True]
#  [False  True False  True  True]]

print(type(df.isnull().values))
# <class 'numpy.ndarray'>

与 pandas.DataFrame 方法 sum() 不同,numpy.ndarray 方法 sum() 默认计算总和。

因此,从isnull()结果的values属性(numpy.ndarray)调用sum(),可以得到缺失值的总数(total number)。

print(df.isnull().values.sum())
# 10
  • 计算非缺失元素的总数
    对于count()可以得到的每一行或每一列,可以通过sum()计算非缺失元素的总数。
print(df.count().sum())
# 5

可以从 notnull() 或 notna() 产生的值属性 (numpy.ndarray) 调用 sum()(对于非缺失元素为真)。

print(df.notnull().values.sum())
# 5
  • 判断整体是否至少有一个缺失值
    上面给出的缺失值总数可以用来判断总数是否包含缺失值。 如果缺失值总数不为0,则至少存在一个缺失值NaN。
print(df.isnull().values.sum() != 0)
# True

如果缺失值总数等于size属性(元素总数),则所有元素都是缺失值NaN。

print(df.size)
# 15

print(df.isnull().values.sum() == df.size)
# False
  • pandas.Series
    pandas.Series还有isnull()、isna()、notnull()、notna()等方法。可以像前面的例子一样处理。
s = df['state']
print(s)
# 0     NY
# 1    NaN
# 2     CA
# Name: state, dtype: object

print(s.isnull())
# 0    False
# 1     True
# 2    False
# Name: state, dtype: bool

print(s.notnull())
# 0     True
# 1    False
# 2     True
# Name: state, dtype: bool

print(s.isnull().any())
# True

print(s.isnull().all())
# False

print(s.isnull().sum())
# 1

print(s.count())
# 2

猜你喜欢

转载自blog.csdn.net/qq_18351157/article/details/130436036