檢查 Python 中的值是否為無窮大或 NaN


任何程式語言最重要的方面之一是能夠處理數字,包括可能為無窮大或未定義的值。在 Python 中,無窮大和 NaN(非數字)的概念非常重要,因為它們經常出現在數學計算和資料分析中。在本教程中,我們將探討如何在 Python 中檢查無窮大和 NaN 值。

Python 中的無窮大

無窮大是一個數學概念,它表示大於任何有限數的數。在 Python 中,無窮大由關鍵字“inf”表示。此關鍵字用於表示計算機記憶體中儲存空間過大的值,例如將數字除以零或計算負數的平方根的結果。

要檢查 Python 中的值是否為無窮大,可以使用 math 模組。此模組提供了一個名為“isinf”的函式,如果給定值為無窮大,則返回 True,否則返回 False。

示例

以下是示例:

import math

x = float('inf')
print(math.isinf(x))  # True

輸出

實現上述程式碼行後,您將獲得以下輸出

True

示例

請看下面的示例:

import math

x = float('10')
print(math.isinf(x))  # False

輸出

實現上述程式碼行後,您將獲得以下輸出

False

在上面的示例中,我們首先定義一個變數“x”,使用 float() 函式將其設定為無窮大值。然後,我們使用 math 模組中的“isinf”函式來檢查“x”是否為無窮大。由於在第一個示例中,“x”確實是無窮大,因此該函式返回 True。而在第二個示例中,“x”不是無窮大,該函式返回 False。

示例

您還可以使用相同的“isinf”函式並傳遞負無窮大值來檢查值是否為負無窮大:

import math

x = float('-inf')
print(math.isinf(x))  # True

輸出

實現上述程式碼行後,您將獲得以下輸出

True

在這個示例中,我們定義一個變數“x”,使用 float() 函式將其設定為負無窮大,然後將其傳遞給“isinf”函式。由於“x”為負無窮大,因此該函式返回 True。

Python 中的 NaN

NaN(非數字)是另一個數學概念,它表示未定義或不可表示的值。在 Python 中,NaN 由關鍵字“nan”表示。此關鍵字用於表示未定義操作的結果值,例如取負數的平方根或進行除以零的操作。

要檢查 Python 中的值是否為 NaN,您可以再次使用 math 模組。此模組提供了一個名為“isnan”的函式,如果給定值為 NaN,則返回 True,否則返回 False。以下是示例:

示例

import math

x = float('nan')
print(math.isnan(x))  # True

輸出

實現上述程式碼行後,您將獲得以下輸出

True

示例

現在,請看下面的示例:

import math

x = float('10')
print(math.isnan(x))  # False

輸出

實現上述程式碼行後,您將獲得以下輸出

False

在這些示例中,我們首先定義一個變數“x”,使用 float() 函式將其設定為 NaN 值。然後,我們使用 math 模組中的“isnan”函式來檢查“x”是否為 NaN。由於在第一個示例中,“x”確實是 NaN,因此該函式返回 True。而在第二個示例中,“x”不是 NaN,該函式返回 False。

示例

需要注意的是,NaN 值不等於任何其他值,包括其他 NaN 值。因此,您不能使用“==”運算子來比較 NaN 值。相反,您應該使用math.isnan函式來檢查 NaN 值。

import math
x = float('nan')
y = float('nan')
print(x == y)        # False
print(math.isnan(x)) # True
print(math.isnan(y)) # True

輸出

實現上述程式碼行後,您將獲得以下輸出

False
True
True

在這個示例中,我們定義了兩個變數“x”和“y”,它們都使用 float() 函式設定為 NaN 值。然後,我們使用 == 運算子來比較“x”和“y”,這返回 False,因為 NaN 值不等於任何其他值。最後,我們使用“isnan”函式來檢查“x”和“y”是否都是 NaN,這對於兩個變數都返回 True。

在 NumPy 中檢查無窮大和 NaN

NumPy 是 Python 中一個流行的數值計算庫,它還提供用於檢查無窮大和 NaN 值的函式。NumPy 模組提供兩個函式:“isinf”和“isnan”。這些函式的行為與 math 模組提供的函式類似,但它們也可以處理值陣列和矩陣。

示例

以下是如何使用 NumPy 的“isinf”函式來檢查陣列是否包含任何無窮大值的示例:

import numpy as np

x = np.array([1, 2, 3, np.inf])
print(np.isinf(x))  # [False False False  True]

輸出

實現上述程式碼行後,您將獲得以下輸出

[False False False  True]

在這個示例中,我們定義了一個數組“x”,它包含四個值,包括無窮大值。然後,我們使用 NumPy 的“isinf”函式來檢查“x”中的哪些值為無窮大。該函式返回一個與“x”形狀相同的布林陣列,其中 True 值表示“x”中相應的元素為無窮大。

示例

以下是如何使用 NumPy 的“isnan”函式來檢查陣列是否包含任何 NaN 值的示例:

import numpy as np

x = np.array([1, 2, np.nan, 4])
print(np.isnan(x))  # [False False  True False]

輸出

實現上述程式碼行後,您將獲得以下輸出:

[False False  True False]

在這個示例中,我們定義了一個數組“x”,它包含四個值,包括 NaN 值。然後,我們使用 NumPy 的“isnan”函式來檢查“x”中的哪些值為 NaN。該函式返回一個與“x”形狀相同的布林陣列,其中 True 值表示“x”中相應的元素為 NaN。

在 Pandas 中檢查無窮大和 NaN

Pandas 是 Python 中一個流行的資料操作庫,它提供多個用於處理資料框和序列的函式。Pandas 還提供用於檢查資料框和序列中無窮大和 NaN 值的函式。

示例

以下是如何在 Pandas 中檢查無窮大和 NaN 值的一些示例:

import pandas as pd
import numpy as np

# Create a dataframe
df = pd.DataFrame({
   'A': [1, 2, 3, np.inf],
   'B': [4, 5, 6, np.nan],
   'C': [7, 8, np.nan, 9]
})

# Check for infinity values
inf_mask = df.isin([np.inf, -np.inf])
print(inf_mask)

# Check for NaN values
nan_mask = df.isna()
print(nan_mask)

輸出

實現上述程式碼行後,您將獲得以下輸出

	  A      B      C
0  False  False  False
1  False  False  False
2  False  False  False
3   True  False  False
       A      B      C
0  False  False  False
1  False  False  False
2  False  False   True
3  False   True  False

在這個示例中,我們建立了一個數據框“df”,它包含幾列具有不同型別的值,包括無窮大和 NaN 值。然後,我們使用“isin”函式來檢查無窮大值,並使用“isna”函式來檢查 NaN 值。

“isin”函式返回一個與“df”形狀相同的布林資料框,其中 True 值表示“df”中相應的元素為無窮大或負無窮大。

“isna”函式返回一個與“df”形狀相同的布林資料框,其中 True 值表示“df”中相應的元素為 NaN。

處理無窮大和 NaN 值

在處理 Python 中的無窮大和 NaN 值時,務必考慮它們將如何影響正在執行的計算或分析。在許多情況下,這些值會導致意外結果或錯誤,因此務必適當地處理它們。

例如,如果您正在執行涉及除以可能為零的變數的數學計算,則應檢查此條件並適當地處理它。這是一個示例

示例

x = 1
y = 0
if y == 0:
   result = float('inf')
else:
   result = x / y

在這個示例中,我們定義了兩個變數“x”和“y”,並在它們之間執行除法運算。由於“y”可能為零,因此我們檢查此條件並透過在“y”為零時將結果設定為無窮大來適當地處理它。

同樣,如果您正在執行涉及 NaN 值的資料分析,則應考慮這些值將如何影響您的結果。例如,如果您正在計算可能包含 NaN 值的一組值的平均值或標準差,則應使用能夠適當地處理這些值的函式。

示例

以下是如何計算可能包含 NaN 值的一組值的平均值的示例:

import numpy as np

x = np.array([1, 2, np.nan, 4])
mean = np.nanmean(x)
print(mean)

輸出

實現上述程式碼行後,您將獲得以下輸出

2.3333333333333335

在這個示例中,我們定義了一個數組“x”,它包含四個值,包括 NaN 值。然後,我們使用 NumPy 的“nanmean”函式來計算“x”中值的平均值,不包括任何 NaN 值。該函式將平均值返回為浮點數。

結論

瞭解如何在 Python 中檢查無窮大和 NaN 值對於任何使用數值資料的開發人員或資料分析人員來說都是一項重要的技能。這些值可能出現在各種數學計算和資料分析任務中,並且必須適當地處理它們以避免意外結果或錯誤。

透過使用 Python 提供的內建函式和模組,開發人員和資料分析人員可以有效地處理這些值,並確保其計算和分析的準確性。

更新於:2024年2月20日

瀏覽量 508 次

開啟你的職業生涯

完成課程,獲得認證

開始學習
廣告