Pandas 怎么处理缺失数据的计算?

文章导读
Previous Quiz Next 在处理数据时,您经常会遇到缺失值,在 Pandas 中这些值表示为 NaN(Not a Number)。与缺失值进行计算需要格外注意,因为 NaN 值会在大多数算术运算中传播,这可能会改变结果。
📋 目录
  1. 缺失数据的算术运算
  2. 描述性统计中的缺失数据处理
  3. 含缺失数据的累积操作
A A

Python Pandas - 缺失数据的计算



Previous
Quiz
Next

在处理数据时,您经常会遇到缺失值,在 Pandas 中这些值表示为 NaN(Not a Number)。与缺失值进行计算需要格外注意,因为 NaN 值会在大多数算术运算中传播,这可能会改变结果。

Pandas 提供了灵活的方式来在计算过程中管理缺失数据,让您能够控制这些值如何影响结果。在本教程中,我们将学习 Pandas 如何在计算过程中处理缺失数据,包括算术运算、描述性统计和累积运算。

缺失数据的算术运算

在 Pandas 对象之间执行算术运算时,缺失值(NaN)默认会传播。例如,当您将两个包含 NaN 值的 series 相加时,结果中任何一方有缺失值的位置都会是 NaN。

示例

以下示例演示了在两个包含缺失值的 series 对象之间执行算术运算。

import pandas as pd
import numpy as np

# 创建 2 个输入 series 对象
ser1 = pd.Series([1, np.nan, np.nan, 2])
ser2 = pd.Series([2, np.nan, 1, np.nan])

# 显示 series
print("输入 Series 1:\n",ser1)
print("\n输入 Series 2:\n",ser2)

# 将两个包含 NaN 值的 series 相加
result = ser1 + ser2
print('\n两个 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

# 创建示例 DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, 7, 8]}
df = pd.DataFrame(data)

# 显示输入 DataFrame
print("输入 DataFrame:\n", df)

# 对包含 NaN 值的列求和
result = df['A'].sum()

print('\n对列的值求和后的结果:\n',result)

以上代码的输出如下 −

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

示例:包含缺失值的乘积计算

类似于求和,在计算包含缺失数据(NaN)的值的乘积时,NaN 被视为 1。这确保了缺失值不会改变最终的乘积。

以下示例使用 pandas 的 df.prod() 函数计算 pandas 对象的乘积。

import pandas as pd
import numpy as np

# 创建示例 DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# 显示输入 DataFrame
print("输入 DataFrame:\n", df)

# 包含 NaN 值的乘积
result = df.prod()

print('\nDataFrame 值乘积后的结果:\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

# 创建示例 DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# 显示输入 DataFrame
print("Input DataFrame:\n", df)

# 通过忽略 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

# 创建示例 DataFrame
data = {'A': [np.nan, 2, np.nan, 4], 'B': [5, 6, np.nan, np.nan]}
df = pd.DataFrame(data)

# 显示输入 DataFrame
print("Input DataFrame:\n", df)

# 通过保留 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。