Python 中如何处理分类变量的缺失值?
缺失值是真实世界数据集中的常见现象,正确处理它们对于准确的数据分析和建模至关重要。在处理 Python 中的分类变量时,有多种方法可以解决缺失值。在本文中,我们将探讨两种处理分类变量缺失值的有效技术,并为每种方法提供分步算法。此外,我们将提供真实且可执行的 Python 代码示例来演示这些技术的实现。
语法
让我们熟悉一下我们将使用的算法的语法 -
# Syntax for filling missing values using method_name dataframe['column_name'].fillna(method_name, inplace=True)
算法
步骤 1 - 导入必要的库
步骤 2 - 加载数据
步骤 3 - 识别缺失值
步骤 4 - 处理缺失值
步骤 5 - 验证缺失值
步骤 6 - 执行进一步分析
数据集
Name,Age,Gender,Country John,25,Male,USA Alice,30,Female,Canada Bob,35,Male, Jane,27, Mike,22,Male,Germany
方法 1:众数插补
识别数据集中包含缺失值的分类列。
使用 mode() 函数计算相应列的众数(最常出现的值)。
使用 fillna() 方法将计算出的众数填充缺失值,并将 method_name 参数设置为 'mode'。
示例
import pandas as pd # Load the dataset data = pd.read_csv('your_dataset.csv') # Identify the column(s) with missing values column_with_missing_values = 'Country' # Compute the mode mode_value = data[column_with_missing_values].mode()[0] # Fill the missing values with mode data[column_with_missing_values].fillna(mode_value, inplace=True) # Verify the changes print(data[column_with_missing_values].isnull().sum())
输出
0
解释
众数插补是处理分类变量缺失值的一种常用方法。它涉及使用众数填充缺失值,众数表示该列中最常出现的类别。以下是此方法的工作原理的详细说明 -
识别数据集中包含缺失值的分类列 - 首先,您需要识别存在缺失值的列。这些列将成为众数插补过程的重点。
使用 mode() 函数计算各个列的众数 - 识别出包含缺失值的列后,您可以使用 mode() 函数计算每一列的众数。众数表示在该列中最常出现的类别。
使用 fillna() 方法将计算出的众数填充缺失值 - 确定众数后,您可以继续使用计算出的众数填充分类列中的缺失值。这可以通过 Python 中的 fillna() 方法实现,将 method_name 参数指定为 'mode'。通过设置 inplace=True,更改将直接应用于数据集。
众数插补是一种简单直观的方法,用于处理分类变量中的缺失值。通过用最常出现的类别填充缺失值,它确保了该列中类别的总体分布保持相对不变。但是,必须注意,如果缺失值不是随机缺失,则此方法可能会引入偏差。此外,在有多个包含缺失值的列的情况下,应分别处理每个列。
方法 2:随机采样
识别包含缺失值的分类列。
使用 numpy 库生成对应于缺失值的随机索引。
使用 unique() 函数创建该列中唯一类别的列表。
使用 fillna() 方法用从列表中随机采样的类别替换缺失值。
示例
import pandas as pd import numpy as np # Load the dataset data = pd.read_csv('your_dataset.csv') # Identify the column with missing values column_with_missing_values = 'Gender' # Generate random indices for missing values missing_indices = data[data[column_with_missing_values].isnull()].index # Get unique categories in the column unique_categories = data[column_with_missing_values].unique() # Replace missing values with random sampling data.loc[missing_indices, column_with_missing_values] = np.random.choice(unique_categories, len(missing_indices)) # Verify the changes print(data[column_with_missing_values].isnull().sum())
输出
0
解释
随机采样是处理分类变量缺失值的另一种方法。此方法不是用众数插补缺失值,而是用从该列中现有唯一类别中随机采样的类别替换缺失值。以下是此方法的工作原理的详细说明 -
识别包含缺失值的分类列 - 从识别数据集中包含缺失值的列开始。这些是将成为随机采样过程重点的列。
生成缺失值的随机索引 - 接下来,为分类列中的缺失值生成随机索引。这可以使用 numpy 等库来实现。
创建该列中唯一类别的列表 - 提取包含缺失值的分类列中存在的唯一类别。此列表将用于随机采样。
用随机采样替换缺失值 - 使用随机索引和唯一类别的列表,通过从列表中随机采样类别来替换分类列中的缺失值。这可以通过 fillna() 方法完成,将随机采样的类别分配给指定索引处的缺失值。
随机采样提供了一种灵活的方法来处理分类变量中的缺失值。通过随机分配类别,它允许插补值具有可变性,并避免引入可能因使用众数插补而产生的偏差。但是,重要的是要注意,随机采样可能会更改该列中类别的分布,从而可能影响后续的分析或建模任务。此外,与众数插补一样,应分别处理每个包含缺失值的列。
众数插补和随机采样都提供了处理分类变量缺失值的有效方法。两种方法之间的选择取决于数据集的具体特征和分析的目标。在做出决定之前,评估每种方法对数据完整性和可靠性的潜在影响至关重要。
结论
处理缺失值是数据预处理中的一个重要步骤,并且在处理 Python 中的分类变量时,可以使用两种有效的方法 - 众数插补和随机采样。众数插补方法用最常出现的类别填充缺失值,而随机采样方法用从现有唯一类别中随机选择的类别替换缺失值。通过使用这些方法,数据分析师和数据科学家可以确保分类数据的完整性和准确性。请记住,根据您的特定数据集调整这些技术,并始终评估所选方法对分析的影响。