如何知道 astype('category').cat.codes 分配的标签?
Posted
技术标签:
【中文标题】如何知道 astype(\'category\').cat.codes 分配的标签?【英文标题】:How to know the labels assigned by astype('category').cat.codes?如何知道 astype('category').cat.codes 分配的标签? 【发布时间】:2018-12-08 16:14:13 【问题描述】:我有以下名为language
的数据框
lang level
0 english intermediate
1 spanish intermediate
2 spanish basic
3 english basic
4 english advanced
5 spanish intermediate
6 spanish basic
7 spanish advanced
我使用
将每个变量分类为数字language.lang.astype('category').cat.codes
和
language.level.astype('category').cat.codes
分别。获取如下数据框:
lang level
0 0 1
1 1 1
2 1 0
3 0 0
4 0 2
5 1 1
6 1 0
7 1 2
现在,我想知道是否有办法获得每个值对应的原始值。我想知道lang
列中的0
值对应的是英文等等。
有什么功能可以让我找回这些信息吗?
【问题讨论】:
【参考方案1】:你可以生成字典:
c = language.lang.astype('category')
d = dict(enumerate(c.cat.categories))
print (d)
0: 'english', 1: 'spanish'
那么如果有可能的话map
:
language['code'] = language.lang.astype('category').cat.codes
language['level_back'] = language['code'].map(d)
print (language)
lang level code level_back
0 english intermediate 0 english
1 spanish intermediate 1 spanish
2 spanish basic 1 spanish
3 english basic 0 english
4 english advanced 0 english
5 spanish intermediate 1 spanish
6 spanish basic 1 spanish
7 spanish advanced 1 spanish
【讨论】:
【参考方案2】:你可以使用 .cat.categories 索引,像这样:
df.lang.cat.categories[0]
输出:
'english'
【讨论】:
【参考方案3】:分类类型是分解的过程。这意味着每个唯一值或类别都被赋予一个从零开始递增的整数值。
例如:
c = language.lang.astype('category')
你有代码
codes = c.cat.codes
和中的类别
cats = c.cat.categories
它旨在使您能够利用 Numpy 数组切片,并且您可以通过
访问您的标签或类别cats[codes]
Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
'spanish', 'spanish'],
dtype='object')
当您已经有了一个可以非常有效地查找它的构造时,就不需要构造一个字典来查找它。
作为进一步的示例,这就是我们可以使用pd.factorize
进行复制的方式
codes, cats = pd.factorize(language.lang)
print(cats, codes, cats[codes], sep='\n\n')
Index(['english', 'spanish'], dtype='object')
[0 1 1 0 0 1 1 1]
Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
'spanish', 'spanish'],
dtype='object')
【讨论】:
以上是关于如何知道 astype('category').cat.codes 分配的标签?的主要内容,如果未能解决你的问题,请参考以下文章
C++ 中是不是有与 python 中的 astype() 函数等效的函数?
numpy.astype(np.uint8) 如何转换浮点数组? -1.2997805 变为 255