
本教程将详细介绍如何利用pandas库计算dataframe中各列的中位数绝对离差(mad),并据此筛选出具有最高mad值的指定数量的列,从而在新dataframe中保留数据变异性最显著的特征。这种方法在处理大规模数据集时尤为高效,且对异常值具有较好的鲁棒性。
在数据分析中,衡量数据离散程度是理解数据集特征的关键一步。常见的离散度指标包括标准差和方差。然而,这些指标对异常值非常敏感。当中位数绝对离差(Median Absolute Deviation, MAD)则提供了一种更稳健的替代方案。MAD定义为数据集中所有数据点与其自身中位数之差的绝对值的中位数。它能够有效反映数据的集中趋势和变异性,同时减少极端值的影响,特别适用于包含噪声或异常值的数据集。
在处理拥有大量特征(列)的数据集时,我们经常需要识别并保留那些信息量更大、变异性更显著的特征。例如,在一个包含20,000列的DataFrame中,如果每列代表一个特征,而我们希望选择其中2,000个最具代表性或区分度的特征,MAD便是一个非常有效的筛选标准。
要从一个大型Pandas DataFrame中选出具有最高MAD值的列,我们可以遵循以下步骤:
以下代码演示了如何在Pandas DataFrame中实现上述过程:
import pandas as pd
import numpy as np
# 1. 创建一个模拟的DataFrame
# 假设有1000行和20000列,列名为0到19999
rng = np.random.default_rng(seed=2024)
df = pd.DataFrame(rng.random((1000, 20000)))
print("原始DataFrame的形状:", df.shape)
print("原始DataFrame的前5行:\n", df.head())
# 2. 计算每列的中位数绝对离差 (MAD)
# df.median() 计算每列的中位数
# df.sub(df.median()) 计算每个元素与其列中位数的差
# .abs() 取绝对值
# .median() 再次计算中位数,得到每列的MAD
mad = df.sub(df.median()).abs().median()
# 3. 根据MAD值降序排序,并选取前N个列的索引
# 假设我们想选择MAD值最高的1000列
num_cols_to_select = 1000
cols = mad.sort_values(ascending=False).head(num_cols_to_select).index
# 4. 使用选定的列索引创建新的DataFrame
out = df[cols]
print("\n筛选后DataFrame的形状:", out.shape)
print("筛选后DataFrame的前5行:\n", out.head())代码详解:
MAD与标准差的对比:
性能考虑:
选择列的数量 (N):
数据类型:
通过本教程,我们学习了如何利用Pandas库高效地计算DataFrame中各列的中位数绝对离差(MAD),并以此作为标准筛选出离散度最高的指定数量的列。这种方法在特征选择、降维以及数据探索中具有重要意义,尤其是在面对包含大量潜在特征且可能存在异常值的数据集时,MAD提供了一个稳健而有效的解决方案。掌握这一技巧,将有助于您更深入地理解数据并提取其核心信息。
以上就是使用Pandas高效选择高离散度(MAD)的DataFrame列的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号