跳至主要内容

Python NaN:在 Python 中检查缺失值的 4 种方法

探索使用 NumPy 和 Pandas 检测 Python 中 NaN 值的 4 种方法。了解 NaN 与 None 的关键区别,高效完成数据清洗与分析。
· 5分钟 阅读

使用 AI 探索

在数据科学与分析领域,遇到缺失数据几乎是常态。缺失值会扭曲分析结果、导致错误结论,并打乱数据处理流程。妥善处理这些空缺对于维护分析的可靠性至关重要。本文将为您介绍在 Python 中识别 NaN(Not a Number)值的多种方法。

简短答案:使用 NumPy 的 isnan() 函数或 Pandas 的 .isna() 方法

在 Python 中处理缺失值,主要取决于您所使用的数据结构。

针对单个值或数组:使用 NumPy

NumPy 的 isnan() 函数非常适合在数值数组或单个值中识别 NaN,简单高效。来看一个示例:

import numpy as np

# Single value check
my_missing_value = np.nan
print(np.isnan(my_missing_value))

# Output: True

# Array check
my_missing_array = np.array([1, np.nan, 3])
nan_array = np.isnan(my_missing_array)
print(nan_array)

# Output: [False  True False]

针对 DataFrame:使用 Pandas

Pandas 提供了 .isna() 和 .isnull() 等完整方法,用于在 DataFrame 或 Series 中检测缺失值,能够与数据分析流程无缝衔接。

import pandas as pd
import numpy as np

my_dataframe = pd.DataFrame({
    'Column1': ["I", "Love", np.nan], 
    'Column2': ["Python", np.nan, "The Best"]
})

print(my_dataframe.isna())

#    Column1  Column2
# 0    False    False
# 1    False     True
# 2     True    False

运行上述代码后,输出会如上所示,在更贴近日常场景的上下文中标示出 NaN 的存在。

NaN 与 None 的区别

在 Python 中区分 NaN 与 None 十分重要。NaN 是“非数值”的浮点数表示,主要用于数值计算;而 None 是 Python 的对象,表示值的缺失,类似其他语言中的 null。NaN 常见于数学或科学计算场景,而 None 更为通用,用于表示数据的缺省。

在 Python 中检查 NaN 的 4 种方法

在数据预处理阶段定位缺失值是关键步骤。下面结合先前的示例,介绍四种在 Python 中检查 NaN 的实用方法。

1. 使用 np.isnan() 检查 NaN

如前所述,NumPy 为识别单个值与数组中的 NaN 提供了简洁的方法,对数值数据分析十分重要。

import numpy as np

# Checking a single value
print(np.isnan(np.nan))

# Output: True

# Checking an array
my_array = np.array([1, 5, np.nan])
print(np.isnan(my_array))

# Output: [False False  True]

2. 使用 pd.isna() 检查 NaN

Pandas 让从标量到复杂 DataFrame 的 NaN 检测更加简便,在数据处理任务中极具价值。

import numpy as np
import pandas as pd

# Checking a single value
print(pd.isna(np.nan))

# Output: True

# Checking a pandas Series
my_series = pd.Series(["Python", np.nan, "The Best"])
print(my_series.isna())

# Output:
# 0    False
# 1     True
# 2    False

# Checking a pandas DataFrame
my_dataframe = pd.DataFrame({
    'Column1': ["I", "Love", np.nan], 
    'Column2': ["Python", np.nan, "The Best"]
})

print(pd.isna(my_dataframe)) # Output a DataFrame with True for missing values

3. 在 DataFrame 中使用 Pandas 的 .isna() 或 .isnull() 方法检查 NaN

Pandas 的 DataFrame 还提供 .isna() 与 .isnull() 方法,可轻松定位数据集中各处的缺失值,清晰呈现数据完整性。

import numpy as np
import pandas as pd

# Create a dataframe with missing values
my_dataframe = pd.DataFrame({
    'Column1': ["I", "Love", np.nan], 
    'Column2': ["Python", np.nan, "The Best"]
})

print(my_dataframe.isna())
# Output:
#    Column1  Column2
# 0    False    False
# 1    False     True
# 2     True    False

print(my_dataframe.isnull())
# Output:
#    Column1  Column2
# 0    False    False
# 1    False     True
# 2     True    False

4. 在 DataFrame 中使用 math.isnan() 检查 NaN

对于单个数值的检查,math.isnan() 提供了简单而有效的方案,尤其适用于处理纯 Python 数据类型时。

import math

# Assuming my_number is a float or can be converted to one
my_number = float('nan')
print(math.isnan(my_number))

# Output: True

结语与更多资源

识别并管理 NaN 值是清洗与准备数据以供分析的基础环节。无论您处理的是数组、Series,还是 DataFrame,理解并掌握 Python 中应对缺失数据的工具与方法都至关重要。若想进一步学习,欢迎查看以下资源:

Adel Nehme

作者

Adel Nehme

Adel 是一位数据科学教育者、演讲者,以及 DataCamp 的媒体副总裁。他推出了多门关于数据分析、机器学习和数据工程的课程与直播培训,热衷于在组织内推广数据技能与数据素养,并关注技术与社会的交汇。他拥有数据科学与商业分析硕士学位。闲暇时,您常能发现他陪他的猫 Louis 一起玩耍。

主题