Python Pandas.factorize函数解析与实战教程
Python Pandas.factorize
函数解析与实战教程
摘要
本文章旨在全面地解析 pandas.factorize
函数。pandas.factorize
主要用于将类别型数据高效地编码为数值表示。我将从其核心功能出发,详细剖析每一个参数的用法与细微差别,提供丰富的代码示例以阐明实际应用场景。此外,还将探讨其性能表现,特别是在与 pd.Categorical
的对比以及处理大规模数据集的策略方面。最后,结合金融数据分析等真实案例,为读者提供一份具体的参考教程。
一、 pandas.factorize
核心功能解析
1.1 定义与核心用途
pandas.factorize()
是一个顶层函数(也可作为 Series
和 Index
对象的方法调用),其核心功能是将一个一维的序列(如列表、Pandas Series、索引等)编码为枚举类型 。简而言之,它将数据中所有唯一的值(类别)映射为一组从0开始的唯一整数。
此功能在以下场景中至关重要:
- 机器学习预处理: 绝大多数机器学习算法(如线性回归、支持向量机、神经网络等)要求输入数据为数值类型。
factorize
可以快速地将文本类别(如 ‘北京’, ‘上海’, ‘广州’)或对象类型特征转换为整数(如 0, 1, 2),使其能够被算法理解和处理 。 - 内存优化: 对于含有大量重复字符串或对象的数据列,将其转换为整数编码可以极大地压缩存储空间。整数类型比字符串对象占用更少的内存,这对于处理大型数据集尤为重要 。
- 性能提升: 在某些分组(
groupby
)或聚合操作中,基于整数编码进行计算通常比基于原始字符串进行计算要快 。
1.2 基本语法与返回值
factorize
的基本语法非常直观,它返回一个包含两个元素的元组:codes
和 uniques
。
codes, uniques = pd.factorize(values, sort=False, na_sentinel=-1, size_hint=None)
codes
: 一个与输入values
等长的整数ndarray
数组。数组中的每个整数代表values
中对应位置元素在uniques
中的索引。例如,如果uniques
是['a', 'b']
,那么codes
中所有为0
的位置在原始数据中都对应 ‘a’,为1
的位置都对应 ‘b’ 。uniques
: 一个包含所有唯一值的数组。它的类型取决于输入values
的类型:- 如果
values
是pd.Categorical
类型,uniques
也将是pd.Categorical
。 - 如果
values
是其他Pandas对象(如Series
),uniques
将是pd.Index
。 - 在其他情况下(如Python列表),
uniques
将是一个 NumPyndarray
。
- 如果
重要的是,默认情况下,缺失值(NaN
, None
)不会出现在 uniques
列表中 。
二、 参数深度详解
理解 factorize
的参数是精通其用法的关键。
2.1 values
这是要进行因子化的输入数据,必须是一个一维的、类似序列的对象。可以是 list
、tuple
、numpy.ndarray
、pandas.Series
或 pandas.Index
。如果传入非Pandas对象,它会被内部强制转换为NumPy数组进行处理。
2.2 sort
这是一个布尔值参数,默认为 False
。
sort=False
(默认):uniques
的顺序由元素在values
中首次出现的顺序决定。sort=True
:uniques
会在提取后进行字典序(或数值序)排序。为了保持codes
和uniques
之间的映射关系,codes
的值也会相应地被打乱和重新分配 。
应用场景分析:
- 当你需要编码结果具有确定性和可复现性时(例如,在不同的数据集或代码运行批次中,希望 ‘类别A’ 始终被编码为同一个数字),将
sort
设置为True
是一个非常好的实践。 - 如果只是临时编码,不关心具体整数值,保留默认的
False
会有微小的性能优势,因为它省去了排序的步骤。
2.3 na_sentinel
此参数用于控制如何标记输入数据中的缺失值(NaN
或 None
)。
-
na_sentinel=-1
(默认): 任何在values
中出现的缺失值,在返回的codes
数组中都将被标记为-1
。同时,这些缺失值不会被包含在uniques
列表中 。 -
na_sentinel=None
: 这是一个非常重要的选项。当设置为None
时,缺失值NaN
将被视为一个独立的、有效的类别。它会被包含在uniques
列表中,并在codes
中被赋予一个非负整数的编码 。这在某些场景下非常有用,例如当“缺失”本身是一种需要模型学习的信息时。
2.4 size_hint
这是一个可选的整数参数,用于向内部的哈希表实现提供一个关于唯一值数量的“提示”。当处理非常大的数据集,且唯一值的数量可以被预估时,提供一个合适的 size_hint
可以帮助优化哈希表的初始化和大小调整过程,从而在一定程度上提升性能 。对于一般用途,此参数可以忽略。
三、 代码实例与场景解析
下面通过具体的代码示例来展示 factorize
的用法。
3.1 基础用法
import pandas as pd
import numpy as npdata = ['猫', '狗', '猫', '牛', '狗']# 基础因子化
codes, uniques = pd.factorize(data)