Machine learing中通过pandas.factorize将object值变成离散值

深入了解 pandas.factorize 函数

pandas.factorize() 是 Pandas 库中一个功能强大且多用途的函数。它被用来将对象编码为枚举类型或分类变量。

功能概览:

这个方法非常有用,尤其是当我们需要获取一个数组的数字表示,并且只关心识别其中不同值的情况。factorize 提供了多种形式的调用方式,可作为顶级函数 pandas.factorize(),以及 Series.factorize() 和 Index.factorize() 方法使用。

参数解析:

  • values(序列) :一个一维序列,表示需要进行因子化的数据。如果序列不是 Pandas 对象,会在因子化之前被转换为 ndarray。
  • sort(布尔型,默认为 False) :对唯一值进行排序并洗牌,以保持关系。
  • use_na_sentinel(布尔型,默认为 True) :若为 True,则使用哨兵值 -1 代表 NaN 值。若为 False,则 NaN 值将被编码为非负整数,并且在值的唯一值中不会删除 NaN。

返回结果:

  • codes(ndarray) :一个整数 ndarray,作为唯一值的索引器。uniques.take(codes) 将具有与原始值相同的值。
  • uniques(ndarray、Index 或 Categorical) :唯一的有效值。当值是 Categorical 时,uniques 是一个 Categorical。当值是其他 Pandas 对象时,返回一个 Index。否则,返回一个一维 ndarray。

注意事项:

即使值中存在缺失值,uniques 也不会包含针对缺失值的条目。

示例和用法:

以下是一些使用 pandas.factorize() 的示例:

php 复制代码
>>> codes, uniques = pd.factorize(np.array(['b', 'b', 'a', 'c', 'b'], dtype="O"))
>>> codes
array([0, 0, 1, 2, 0])
>>> uniques
array(['b', 'a', 'c'], dtype=object)
  • 排序和关系维护:使用 sort=True,uniques 将被排序,并且 codes 将被洗牌以维护关系。

    ini 复制代码
    codes, uniques = pd.factorize(np.array(['b', 'b', 'a', 'c', 'b'], dtype="O"),
    ...                               sort=True)
    >>> codes
    array([1, 1, 0, 2, 1])
    >>> uniques
    array(['a', 'b', 'c'], dtype=object)
  • 处理 NaN 值:当 use_na_sentinel=True 时(默认),缺失值在 codes 中用-1 表示,并且在 uniques 中不包含缺失值。

    php 复制代码
    codes, uniques = pd.factorize(np.array(['b', None, 'a', 'c', 'b'], dtype="O"))
    >>> codes
    array([ 0, -1,  1,  2,  0])
    >>> uniques
    array(['b', 'a', 'c'], dtype=object)

对于不同的 Pandas 对象,因子化的结果类型会有所不同。对于 Categoricals,将返回一个 Categorical;对于其他 Pandas 对象,将返回一个 Index。

css 复制代码
>>> cat = pd.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c'])
>>> codes, uniques = pd.factorize(cat)
>>> codes
array([0, 0, 1])
>>> uniques
['a', 'c']
Categories (3, object): ['a', 'b', 'c']

pandas.factorize() 是一个高效的工具,能够有效地处理分类数据表示和缺失值的编码。

相关推荐
罗西的思考3 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
烂蜻蜓4 小时前
Pandas入门教程(十六):常用函数速查手册——读写、清洗、选择、排序、分组与统计
pandas
方方洛7 小时前
ray教程-23-附录C-术语表
人工智能·分布式·机器学习
程序猿编码8 小时前
解决 LLM 算力浪费,一套统一 KV 管理层实现缓存复用
人工智能·神经网络·机器学习·缓存·llm·大模型推理
Blockbuater_drug10 小时前
《经典机器学习实战》第 1 课:导论——是什么、简史、负责任 AI 与标准流程
机器学习·scikit-learn·监督学习·数据清洗·过拟合·训练集测试集·公平性
武天旭11 小时前
AI安全--AI大模型的关键技术组成
人工智能·深度学习·安全·机器学习
程序猿编码13 小时前
RK3588 NPU LLM 推理引擎:自研底层算子,性能碾压原厂 SDK
机器学习·llm·rk3588·大模型推理
Godspeed Zhao15 小时前
从零开始学AI21——决策树
算法·决策树·机器学习
Dovis(誓平步青云)15 小时前
启元 T1 Pro 视觉伺服实践:基于 HSV 阈值与针孔测距的启元机器人寻物实现
开发语言·人工智能·机器学习·二次开发
quantdash_cc15 小时前
个人开发者用 QuantDash 读取港股行情:00700.HK 的 Python 函数封装与校验实践
python·数据分析·pandas·量化交易·股票数据·quantdash