1.基本背景
将对象编码为枚举类型或分类变量。
Pandas.factorize()方法通过标识不同的值来获得数组的数字表示形式。该方法可以同时
使用pandas.factorize()
和Series.factorize()
。
factorize英文意思:分解,分解为因数,因式分解的意思
2.语法结构
pandas.factorize(values, sort=False, na_sentinel=- 1, size_hint=None)
参数详解:
values:sequence
一维数组,非pandas对象在分解之前被强制转换为序列格式
**sort:bool,default False
排序唯一性和随机编码保持对应关系
na_sentinel:int or None, default -1
标记"not found"值,如果为None,则不会从值的唯一性中删除NaN。
size_hint:int, optional
哈希表大小调节器
Return:
codes:ndarray
整数ndarray,唯一索引器
uniques:ndarray, Index, or Categorical
唯一的有效值。
当values是Categorical时,uniques也是Categorical。当values是其他pandas对象时,返回一个Index。否则,返回1-D ndarray。
3.代码示例
3.1 示例1
需求:演示pd.factorize()的使用
import pandas as pd
codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])
print(codes)
print(uniques)
3.2 示例2
需求:演示sort=True的情况
import pandas as pd
codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'], sort=True)
print(codes)
print(uniques)
3.3 示例3
需求:演示存在None值得情况 (na_sentinel=-1 默认值)
import pandas as pd
codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'])
print(codes)
print(uniques)
3.4 示例4
需求:当为Categoricals时,uniques返回值也是Categorical
import pandas as pd
cat = pd.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c'])
codes, uniques = pd.factorize(cat)
print(codes)
print(uniques)
Notice that
'b'
is inuniques.categories
, despite not being present incat.values
.
3.5 示例5
需求:当输入为其他pandas对象时,返回索引
import pandas as pd
cat = pd.Series(['a', 'a', 'c'])
codes, uniques = pd.factorize(cat)
print(codes)
print(uniques)
3.6 示例6
需求:保证NaN值在唯一性中,可设置na_sentinel=None
Changed in version 1.1.2.
import pandas as pd
values = np.array([1, 2, 1, np.nan])
codes, uniques = pd.factorize(values) # default: na_sentinel=-1
print(codes)
print(uniques)
codes, uniques = pd.factorize(values, na_sentinel=None)
print(codes)
print(uniques)
4.总结
1.当一个特征中存在较多的类别时,使用get_dummies()会导致DataFrame中的columns激增。
2.factorize()可以对特征中的类别创建一些数字,来表示分类变量或者枚举型变量(enumerated type)。
3.factorize()只产生一个特征变量,这个特征中对类别使用数字进行区分。适用于出现较多独立变量的
情况。
参考连接:
1.https://vimsky.com/zh-tw/examples/usage/python-pandas-factorize.html
2.https://blog.csdn.net/ssswill/article/details/86555935
3.https://www.cxybb.com/article/eerywh/115363882