Python Pandas - 處理缺失資料



在處理資料時,您經常會遇到缺失值,在 Pandas 中表示為 NaN(非數字)。處理缺失值需要更多注意,因為 NaN 值會傳播到大多數算術運算中,這可能會改變結果。

Pandas 提供了靈活的方法來管理計算期間的缺失資料,允許您控制這些值如何影響您的結果。在本教程中,我們將學習 Pandas 如何在計算期間處理缺失資料,包括算術運算、描述性統計和累積運算。

帶有缺失資料的算術運算

在 Pandas 物件之間執行算術運算時,缺失值 (NaN) 預設情況下會傳播。例如,當您將兩個包含 NaN 值的 Series 相加時,結果中也會在任何一個 Series 中存在缺失值的地方出現 NaN。

示例

以下示例演示了對包含缺失值的兩個 Series 物件執行算術運算。

import pandas as pd
import numpy as np

# Create 2 input series objects
ser1 = pd.Series([1, np.nan, np.nan, 2])
ser2 = pd.Series([2, np.nan, 1, np.nan])

# Display the series
print("Input Series 1:\n",ser1)
print("\nInput Series 2:\n",ser2)

# Adding two series with NaN values
result = ser1 + ser2
print('\nResult After adding Two series:\n',result)

以下是上述程式碼的輸出:

Input Series 1:
 0    1.0
1    NaN
2    NaN
3    2.0
dtype: float64

Input Series 2:
 0    2.0
1    NaN
2    1.0
3    NaN
dtype: float64

Result After adding Two series:
 0    3.0
1    NaN
2    NaN
3    NaN
dtype: float64

處理描述性統計中的缺失資料

Pandas 庫提供了多種計算描述性統計的方法,例如求和、計算乘積或查詢累積和或乘積。這些方法旨在高效地處理缺失資料。

示例:帶有缺失值的求和

在對包含缺失值的資料求和時,會排除 NaN 值。這允許您即使在某些資料缺失的情況下也能計算有意義的總計。

以下示例使用sum()函式對 DataFrame 列執行求和運算。預設情況下,求和運算中會跳過 NaN 值。

import pandas as pd
import numpy as np

# Create a sample DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, 7, 8]}
df = pd.DataFrame(data)

# Display the input DataFrame
print("Input DataFrame:\n", df)

# Summing a column with NaN values
result = df['A'].sum()

print('\nResult After Summing the values of a column:\n',result)

以下是上述程式碼的輸出:

Input DataFrame:
AB
0NaN5
12.06
2NaN7
34.08
Result After Summing the values of a column: 6.0

示例:帶有缺失值的乘積計算

與求和類似,當計算包含缺失資料 (NaN) 的值的乘積時,將其視為 1。這確保缺失值不會改變最終乘積。

以下示例使用 pandas df.prod() 函式計算 pandas 物件的乘積。

import pandas as pd
import numpy as np

# Create a sample DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# Display the input DataFrame
print("Input DataFrame:\n", df)

# Product with NaN values
result = df.prod()

print('\nResult After Product the values of a DataFrame:\n',result)

以下是上述程式碼的輸出:

Input DataFrame:
AB
0NaN5.0
12.06.0
2NaNNaN
34.0NaN
Result After Product the values of a DataFrame: A 8.0 B 30.0 dtype: float64

帶有缺失資料的累積運算

Pandas 提供了諸如cumsum()cumprod()之類的累積方法來生成執行總計或乘積。預設情況下,這些方法會忽略缺失值,但在輸出中保留它們。如果要將缺失資料包含在計算中,可以將skipna引數設定為 False。

示例:帶有缺失值的累積和

以下示例演示瞭如何使用df.cumsum()方法計算包含缺失值的 DataFrame 的累積和。

import pandas as pd
import numpy as np

# Create a sample DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# Display the input DataFrame
print("Input DataFrame:\n", df)

# Calculate cumulative sum by ignoring NaN
print('Cumulative sum by ignoring NaN:\n',df.cumsum())

以下是上述程式碼的輸出:

Input DataFrame:
AB
0NaN5.0
12.06.0
2NaNNaN
34.0NaN
Cumulative sum by ignoring NaN:
AB
0NaN5.0
12.011.0
2NaNNaN
36.0NaN

從上述輸出可以看出,跳過了缺失值,併為可用值計算了累積和。

示例:在累積和中包含 NaN

此示例演示瞭如何透過將skipna=False設定在df.cumsum()方法中來包含缺失值,從而執行累積和。

import pandas as pd
import numpy as np

# Create a sample DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# Display the input DataFrame
print("Input DataFrame:\n", df)

# Calculate the cumulative sum by preserving NaN
print('Cumulative sum by including NaN:\n', df.cumsum(skipna=False))

以下是上述程式碼的輸出:

Input DataFrame:
AB
0NaN5.0
12.06.0
2NaNNaN
34.0NaN
Cumulative sum by including NaN:
AB
0NaN5.0
1NaN11.0
2NaNNaN
3NaNNaN

使用skipna=False,累積和會在遇到 NaN 值時停止,並且所有後續值也變為 NaN。

廣告