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.pswp.cn/web/91681.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法入门:直接插入排序详解

这里写目录标题介绍原理代码实现分析介绍 直接插入排序是一种简单直观的排序算法,适用于小规模数据或基本有序的数据集。其核心思想是构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 原理 我们…

ClickHouse MergeTree引擎:从核心架构到三级索引实战

摘要 MergeTree是ClickHouse最核心的存储引擎,采用列式存储LSM-Tree架构设计,支持高效的数据写入、合并和查询。本文将全面解析MergeTree引擎的基础概念、数据流、核心架构、索引系统以及常见问题。 基础篇: 一、MergeTree引擎基础概念 1. 定…

电脑手机热点方式通信(上)

电脑连接手机热点时的无线链路情况: 电脑上网时(从服务器下载数据,或者上传指令、数据),首先电脑与手机之间基于WiFi协议在2.4G频段或者5G频段通信,然后手机与基站之间再基于4G LTE或者5G NR协议在2412MHz…

MySQL CPU占用过高排查指南

MySQL CPU 占用过高时,排查具体占用资源的表需结合系统监控、数据库分析工具和 SQL 诊断命令。🔍 ​一、快速定位问题根源​​确认 MySQL 进程占用 CPU​使用 top 或 htop 命令查看系统进程,确认是否为 mysqld 进程导致 CPU 飙升。若 MySQL 进…

软件交付终极闸口:验收测试全解析

验收测试:软件交付的关键环节 目录 验收测试:软件交付的关键环节 一、验收测试:软件交付的终极闸口 核心目标与作用 在 SDLC 中的位置 二、验收测试类型详解:精准匹配业务场景 三、验收测试全流程解析:从计划到…

深度学习核心:卷积神经网络 - 原理、实现及在医学影像领域的应用

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#,Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开发…

多线程(二) ~ 线程核心属性与状态

文章目录一. 线程创建(start)(一)继承Thread类,重写run(二)继承Runnable类,重写run(三)Thread匿名内部类重写(四)Runnable匿名内部类重…

Linux---编辑器vim

一、vim的基本概念1.三种模式①命令模式控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式或者进去底行模式②插入模式可进行文本输入,按Esc回到命令行模式③底行模式文件保存或退出,也可以进行文件替换&#…

如何在 Ubuntu 24.04 或 22.04 LTS Linux 上安装 Guake 终端应用程序

通过本教程的简单步骤,在 Ubuntu 24.04 或 22.04 LTS Jammy JellyFish 上安装 Guake 终端以运行命令。 Guake(基于 Quake)是一个基于 Python 的终端模拟器。Guake 的行为类似于 Quake 中的终端:通过某个按键(热键)按下时,窗口会从屏幕顶部滚下来,再次按下相同的按键时…

谷歌Gemini 2.5重磅应用:多模态研究助手Multi-Modal Researcher,实现全网自动研究与AI播客生成

在人工智能赋能科研与内容创作的浪潮中,谷歌基于其最新大模型 Gemini 2.5 推出了突破性工具 Multi-Modal Researcher。这一系统通过整合多模态数据(文本、视频、实时网络信息),实现了从自动研究到内容生成的全流程自动化。用户只需输入研究主题或YouTube视频链接,系统即可…

防御综合实验

一、实验拓补图二、实验需求及配置需求一设备接口VLAN接口类型SW2GE0/0/2VLAN 10AccessGE0/0/3VLAN 20AccessGE0/0/1VLAN List : 10 20Trunk[SW2]vlan 10 [SW2]vlan 20 [SW2]interface GigabitEthernet 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEt…

堆----2.前 K 个高频元素

347. 前 K 个高频元素 - 力扣(LeetCode) /** 桶排序: 首先遍历数组,使用HashMap统计每个元素出现的次数 创建一个大小为length 1的List数组,下标代表元素出现次数,出现次数一致的元素放在同一个数组中 倒数遍历List数组即可得得到前K个高频元素 细节注…

如何分析Linux内存性能问题

一、Linux中的buffer与cache的区别 Linux的内存管理与监控_linux服务器虚假内存和真实内存怎么区分-CSDN博客文章浏览阅读66次。本文主要是关于【Linux系统的物理内存与虚拟内存讲解】【重点对虚拟内存的作用与用法进行了讲解说明】【最后还对如何新增扩展、优化、删除内存交换…

二次型 线性代数

知识结构总览首先是我们的二次型的定义,就是说什么样的才算是一个二次型。然后就是如何把二次型化为标准型,最后就是正定二次型的定义和判断的一些条件。二次型的定义二次型其实是一种函数表达的方式,如上,含义其实就是每个项都是…

云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合

在当今微服务架构主导的时代,容器化、编排与服务治理已成为构建弹性、可扩展应用的核心支柱。本文将深入探讨如何将 Docker(容器化基石)、Kubernetes(编排引擎)与 Spring Cloud(微服务框架) 无缝…

vue让elementUI和elementPlus标签内属性支持rem单位

vue让elementUI和elementPlus标签内属性支持rem单位 如 Element Plus 的 el-table 默认不直接支持使用 rem 作为列宽单位 解决方法: 将 rem 转换为像素值(基于根元素字体大小) // 计算rem对应的像素值 const calcRem (remValue) > {// 获取根元素(ht…

基于OAuth2与JWT的微服务API安全实战经验分享

引言 在微服务架构中,API 安全成为了保护服务免受未授权访问和攻击的关键要素。本文结合真实生产环境案例,以实战经验为出发点,分享基于 OAuth2 JWT 的微服务 API 安全方案,从业务场景、技术选型、实现细节、踩坑及解决方案&…

scrapy库进阶一

scrapy 库复习 scrapy的概念:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架 scrapy框架的运行流程以及数据传递过程: 爬虫中起始的url构造成request对象–>爬虫中间件–>引擎–>调度器调度器把request–>引擎…

Objective-C实现iOS平台微信步数修改指南

本文还有配套的精品资源,点击获取 简介:本文介绍如何在iOS平台上使用Objective-C语言,通过苹果的HealthKit框架读取和修改微信步数以及相关健康数据。首先介绍如何引入和使用HealthKit框架,包括请求权限、读取步数数据、写入步…

【ElementPlus】深入探索ElementPlus:前端界面的全能组件库

📚 引言在现代 Web 开发中,创建既美观又功能强大的用户界面是一项挑战。Element Plus,作为 Vue 3 生态中的明星 UI 组件库,以其丰富的组件、优秀的性能和易用性赢得了广大开发者的青睐。本文将全面覆盖 Element Plus 的 常用核心组…