深入了解 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 将被洗牌以维护关系。inicodes, 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 中不包含缺失值。phpcodes, 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()
是一个高效的工具,能够有效地处理分类数据表示和缺失值的编码。