讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

使用Pandas高效选择高离散度(MAD)的DataFrame列

老敏姑娘_5110

老敏姑娘_5110

发布时间:2025-11-26 12:03:06

|

350人浏览过

|

来源于php中文网

原创

使用Pandas高效选择高离散度(MAD)的DataFrame列

本教程将详细介绍如何利用pandas库计算dataframe中各列的中位数绝对离差(mad),并据此筛选出具有最高mad值的指定数量的列,从而在新dataframe中保留数据变异性最显著的特征。这种方法在处理大规模数据集时尤为高效,且对异常值具有较好的鲁棒性。

引言:中位数绝对离差 (MAD) 及其重要性

在数据分析中,衡量数据离散程度是理解数据集特征的关键一步。常见的离散度指标包括标准差和方差。然而,这些指标对异常值非常敏感。当中位数绝对离差(Median Absolute Deviation, MAD)则提供了一种更稳健的替代方案。MAD定义为数据集中所有数据点与其自身中位数之差的绝对值的中位数。它能够有效反映数据的集中趋势和变异性,同时减少极端值的影响,特别适用于包含噪声或异常值的数据集。

在处理拥有大量特征(列)的数据集时,我们经常需要识别并保留那些信息量更大、变异性更显著的特征。例如,在一个包含20,000列的DataFrame中,如果每列代表一个特征,而我们希望选择其中2,000个最具代表性或区分度的特征,MAD便是一个非常有效的筛选标准。

核心方法:计算与筛选

要从一个大型Pandas DataFrame中选出具有最高MAD值的列,我们可以遵循以下步骤:

  1. 计算每列的中位数绝对离差 (MAD):对于DataFrame中的每一列,首先计算其所有值的中间数,然后计算每个值与该中位数之差的绝对值,最后再计算这些绝对差值的中位数。
  2. 排序MAD值:将所有列的MAD值按降序排列,以便识别出离散度最高的列。
  3. 选取排名靠前的列:根据需要,选择MAD值排名靠前的N个列的名称(索引)。
  4. 构建新DataFrame:使用这些选定的列名称,从原始DataFrame中提取数据,生成一个新的DataFrame。

示例代码

以下代码演示了如何在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())

代码详解:

  • df.sub(df.median()): 这一步计算了DataFrame中每个元素与其所在列中位数的差值。df.median()会返回一个Series,其中包含每列的中位数。Pandas的广播机制使得这个Series能够正确地与DataFrame进行逐列相减。
  • .abs(): 对上一步的结果取绝对值,得到每个元素与中位数之间距离的绝对值。
  • .median(): 再次计算中位数,这次是对每个列中的绝对差值进行计算,从而得到该列的MAD。
  • mad.sort_values(ascending=False): 将计算出的所有列的MAD值进行降序排序。ascending=False确保MAD值最高的列排在前面。
  • .head(num_cols_to_select): 从排序后的MAD Series中选取前num_cols_to_select个值,即MAD最高的那些列。
  • .index: 获取这些选定MAD值的对应列的名称(即DataFrame的列索引)。
  • out = df[cols]: 使用这些选定的列名称作为索引,从原始DataFrame df 中提取数据,创建一个新的DataFrame out。

注意事项与最佳实践

  1. MAD与标准差的对比:

    • 鲁棒性:MAD对异常值具有更高的鲁棒性。如果数据中存在极端的离群点,标准差会受到显著影响而夸大数据的离散程度,而MAD则能提供更真实的变异性度量。
    • 适用场景:当数据分布接近正态分布且无明显异常值时,标准差可能更常用。但当数据分布偏斜或含有异常值时,MAD是更好的选择。
  2. 性能考虑:

    • 对于非常大的DataFrame(例如,行数和列数都非常多),计算MAD可能需要一定的计算资源。Pandas的向量化操作通常效率很高,但仍需注意内存消耗和处理时间。
    • 如果需要处理的数据量极其庞大,可以考虑使用Dask等分布式计算库来并行处理。
  3. 选择列的数量 (N):

    • num_cols_to_select 参数的设置取决于具体的应用场景和数据分析目标。通常,这个值会根据原始列的总数和希望保留的信息量来确定。
    • 可以通过可视化MAD分布图,或结合领域知识来辅助确定最佳的N值。
  4. 数据类型:

    • 确保DataFrame中的列包含数值类型数据,因为MAD计算是基于数值的。如果存在非数值列,需要先进行数据清洗或类型转换。

总结

通过本教程,我们学习了如何利用Pandas库高效地计算DataFrame中各列的中位数绝对离差(MAD),并以此作为标准筛选出离散度最高的指定数量的列。这种方法在特征选择、降维以及数据探索中具有重要意义,尤其是在面对包含大量潜在特征且可能存在异常值的数据集时,MAD提供了一个稳健而有效的解决方案。掌握这一技巧,将有助于您更深入地理解数据并提取其核心信息。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2193

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3694

2023.10.07

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

360

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

292

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

931

2026.04.13

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3531

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

574

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

602

2026.02.12

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn