当前位置: 首页 > ai >正文

Python Pandas.unique函数解析与实战教程

Python Pandas.unique 函数解析与实战教程

摘要

本文章旨在全面地解析 pandas 库中的 unique 函数。pandas.unique 是一个用于从一维数组型(array-like)对象中提取唯一值的高效工具。我们将从其核心功能、函数签名、参数详解、返回值类型,到关键行为特性(如顺序保留、缺失值处理)进行详细阐述。此外,还将包含丰富的实战代码示例,涵盖不同数据类型的应用场景,并对 pandas.uniqueSeries.uniquenumpy.unique 及原生 set() 在性能上进行对比分析。最后,本文章将探讨一些常见的错误处理和使用注意事项,以帮助读者在数据分析实践中更准确、高效地使用此函数。


1. 核心功能与函数签名

pandas.unique 是 Pandas 库提供的一个顶层函数(top-level function),其主要目标是从一个一维数据结构中,按照值首次出现的顺序,提取出所有不重复的元素。

1.1 函数签名

pandas.unique 的函数签名非常简洁 。

pandas.unique(values)

1.2 参数详解 (values)

该函数仅接受一个参数:

  • values:
    • 类型: 1d array-like (一维数组型对象) 。
    • 说明: 这是你希望从中提取唯一值的数据源。它可以是多种形式,包括但不限于:
      • pandas.Series
      • pandas.Index
      • numpy.ndarray
      • Python list
      • Python tuple

1.3 返回值详解

pandas.unique 的返回值类型并不是固定的,而是取决于输入 values 的数据类型,这一点对于后续操作至关重要 。

  • numpy.ndarray: 这是最常见的返回类型。当输入是 pandas.Seriesnumpy.ndarray 或包含数值、字符串等基本类型的列表时,函数会返回一个 NumPy 数组 。
  • pandas.Index: 如果输入本身就是一个 pandas.Index 对象,则返回的唯一值集合也将被封装在一个新的 Index 对象中 。
  • pandas.Categorical: 如果输入的数据类型是 Categorical(分类型),则返回值也是一个 Categorical 对象,它包含了数据中实际出现的类别 。
  • ExtensionArray: 对于 Pandas 中其他扩展数组类型(如带时区的时间序列数据),函数会返回相应类型的 ExtensionArray

2. 关键行为特性

理解 pandas.unique 的核心行为是正确使用它的基础。

2.1 顺序保留

这是 pandas.unique 最重要的特性之一。它返回的唯一值是按照它们在原始数据 values首次出现的顺序排列的。函数不会对结果进行排序 。这与 numpy.unique(默认排序)和 Python 的 set(无序)有显著区别。

import pandas as pddata = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
# 顺序将是 'apple', 'banana', 'cherry'
print(pd.unique(data))
# 输出: ['apple' 'banana' 'cherry']

2.2 缺失值处理

pandas.unique 将缺失值(NA)视为一个有效的、唯一的元素,并会将其包含在返回结果中 。这包括:

  • numpy.nan (用于浮点数)
  • None (用于对象类型)
  • pd.NA (通用缺失值标记)
  • pd.NaT (用于日期时间类型)
import numpy as npdata_with_na = [2, 1, np.nan, 3, 1, np.nan, 2]
# np.nan 会被当做一个唯一值包含在内
print(pd.unique(data_with_na))
# 输出: [ 2.  1. nan  3.]

如果你希望得到不包含缺失值的结果,需要在调用 unique 之前手动过滤掉它们 。

series = pd.Series([2, 1, np.nan, 3
http://www.xdnf.cn/news/16828.html

相关文章:

  • 24黑马SpringCloud的Docker本地目录挂载出现相关问题解决
  • 《JMM 与 happens-before 原则:并发编程的核心内存语义》
  • 网络常识-子网掩码
  • 暑期算法训练.13
  • stm32F407 实现有感BLDC 六步换相 cubemx配置及源代码(二)
  • 电脑系统中的BCD
  • 排序算法-堆排序
  • ARMv8/v9架构FAR_EL3寄存器介绍
  • Android 13/14/15 默认授权应用权限的实现方法
  • 《深潜React列表渲染:调和算法与虚拟DOM Diff的优化深解》
  • 开疆智能Profinet转Modbus网关连接信捷PLC从站配置案例
  • WPFC#超市管理系统(4)入库管理
  • oect刷入arm系统安装docker
  • 【Redis数据结构详解】特点、用途与实际应用
  • CCF IVC 2025“汽车安全攻防赛” -- Crypto -- WriteUp
  • VAST视频广告技术实现:从零开始搭建视频广告投放系统
  • 文件同步神器-rsync命令讲解
  • linux编译基础知识-库文件标准路径
  • Oracle 11g RAC集群部署手册(一)
  • imx6ull-驱动开发篇6——Linux 设备树语法
  • K8S部署ELK(二):部署Kafka消息队列
  • NVIDIA GPU架构
  • 四、Portainer图形化管理实战与Docker镜像原理
  • express-jwt报错:Error: algorithms should be set
  • Ubuntu系统VScode实现opencv(c++)视频及摄像头使用
  • [硬件电路-112]:模拟电路 - 信号处理电路 - 二极管的应用 - 峰值检测电路与波形展示
  • 【网络与爬虫 37】ScrapeFly深度解析:云端爬虫革命,告别复杂部署拥抱一键API
  • C++入门自学Day5-- c++类与对象(面试题)
  • 苹果MAC 安卓模拟器
  • HarmonyOS 开发:基于 ArkUI 实现复杂表单验证的最佳实践