美文网首页
pandas里数据结构Category

pandas里数据结构Category

作者: 崔吉龙 | 来源:发表于2019-03-08 11:11 被阅读0次

    问题描述

    在机器学习中,我们经常要用到一些类变量(分类变量),比如小汽车有三种颜色供用户选择(red, blue,yellow),那么在进行机器学习的算法计算时,我们需要把这些字符型类别用具体的数字表示,比如0代表red、1代表blue、2代表yellow。类变量Category应运而生。

    转化类变量

    最简单的模式,就是直接使用Categorical进行类别编码

    In [206]: import pandas as pd
         ...: data = ['a','a','b','c','c']
         ...: print(data)
    ['a', 'a', 'b', 'c', 'c']
    
    # list直接编码成类变量
    In [207]: cat_data = pd.Categorical(data)
         ...: print(cat_data)
    [a, a, b, c, c]
    Categories (3, object): [a, b, c]
    
    # 编码之后的结果
    cat_data.codes
    Out[208]: array([0, 0, 1, 2, 2], dtype=int8)
    
    # 类别映射表
    cat_data.categories
    Out[209]: Index(['a', 'b', 'c'], dtype='object')
    

    当然我们也可以做的稍微复杂点,就是可以指定类别映射表。

    In [210]: car_colors = ['Blue', 'Red', 'Green']
         ...: car_data = ['Blue','Green','Red','Blue','Red']
         ...: cat_car = pd.Categorical(car_data, categories=car_colors)
         ...: print(cat_car)
    [Blue, Green, Red, Blue, Red]
    Categories (3, object): [Blue, Red, Green]
    
    In [211]: cat_car.codes
    Out[211]: array([0, 2, 1, 0, 1], dtype=int8)
    
    In [212]: cat_car.categories
    Out[212]: Index(['Blue', 'Red', 'Green'], dtype='object')
    

    我们可以动态修改类别映射表

    In [214]: cat_car.categories = ['Purple','Yellow','Mauve']
         ...: print(cat_car)
    [Purple, Mauve, Yellow, Purple, Yellow]
    Categories (3, object): [Purple, Yellow, Mauve]
    # codes没有变化,只是类别名称变了
    In [215]: cat_car.codes
    Out[215]: array([0, 2, 1, 0, 1], dtype=int8)
    

    相关文章

      网友评论

          本文标题:pandas里数据结构Category

          本文链接:https://www.haomeiwen.com/subject/jimseqtx.html