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。

广告