趋近智
有时,缺失数据不仅仅分散在少数几行中;它可能严重影响数据集中的整个列(特征)。在上一节中,我们讨论了删除含有缺失值的行。现在,我们将考虑一种不同的、有时是必要的,方法:删除整个列。
这种策略通常用于特定列的缺失条目比例非常高的情况。为什么?因为如果列中的大部分数据缺失,该特征可能不会为您的分析或机器学习 (machine learning)模型提供太多有用信息。试图在这种列中填补大量缺失值(填充,我们将在下一节讨论)可能会引入明显的偏差或噪声,这可能会弊大于利。
没有严格的规定,但一种常见做法是,如果列中有很大一部分值缺失,就考虑删除该列。多少才算“大”?这通常取决于具体情况、数据集的大小以及该特征的重要性。一些分析师使用阈值,例如50%、60%甚至70%的缺失值,作为考虑删除列的起点。
假设你有一个包含客户信息的数据集,其中包含‘传真号码’列。如今,可能很少有客户提供此信息,导致该列可能存在95%的缺失值。对于大多数分析(如预测购买行为),此列不太可能有用,并且是删除的合适选择。
我们来将其可视化。假设我们计算数据集中几列的缺失值百分比:
在这个例子中,‘Last_Login_Device’列有85%的缺失数据。这个高百分比使其成为一个很适合删除的选项。
大多数数据分析库都提供直接的函数来删除列。例如,使用流行的Python pandas库时,你通常会识别你希望删除的列名,然后使用类似drop()的函数,指定列名并指明你正在删除列(而非行)。
# 使用pandas(Python)的例子
# 假设'df'是你的DataFrame,你想删除'Column_X'
# 计算缺失百分比
missing_percentages = df.isnull().mean() * 100
# 识别要删除的列(例如,阈值为70%)
columns_to_drop = missing_percentages[missing_percentages > 70].index
# 删除已识别的列
df_cleaned = df.drop(columns=columns_to_drop)
print(f"原始列: {df.columns.tolist()}")
print(f"删除后的列: {df_cleaned.columns.tolist()}")
删除列是一种权衡。你简化了数据集,但有失去潜在有用信息的风险。在删除列之前:
选择删除列是比删除单个行更激进的步骤。当特征中缺失数据的比例非常大,以至于该特征本身不太可能对分析做出有意义的贡献,或者当填充似乎太不可靠时,通常会采用这种方法。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造