Mar*_*isa 8 python dataframe pandas categorical-data
我有以下数据框称为 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
Run Code Online (Sandbox Code Playgroud)
我通过使用将每个变量分类为数字
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
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有办法获得哪个原始值对应于每个值.我想知道列中的0值lang对应于英语等等.
是否有任何功能可以让我收回这些信息?
jez*_*ael 12
你可以生成字典:
c = language.lang.astype('category')
d = dict(enumerate(c.cat.categories))
print (d)
{0: 'english', 1: 'spanish'}
Run Code Online (Sandbox Code Playgroud)
那么如果有必要,那么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
Run Code Online (Sandbox Code Playgroud)
您可以使用.cat.categories索引,如下所示:
df.lang.cat.categories[0]
Run Code Online (Sandbox Code Playgroud)
输出:
'english'
Run Code Online (Sandbox Code Playgroud)
分类类型是因式分解的过程。这意味着每个唯一值或类别都会被赋予一个从零开始递增的整数值。
例如:
c = language.lang.astype('category')
Run Code Online (Sandbox Code Playgroud)
您已获得代码
codes = c.cat.codes
Run Code Online (Sandbox Code Playgroud)
以及类别中
cats = c.cat.categories
Run Code Online (Sandbox Code Playgroud)
它旨在使您能够利用 Numpy 数组切片,并且您可以通过以下方式访问您的标签或类别
cats[codes]
Index(['english', 'spanish', 'spanish', 'english', 'english', 'spanish',
'spanish', 'spanish'],
dtype='object')
Run Code Online (Sandbox Code Playgroud)
当您已经获得了一个可以非常有效地查找它的构造时,就不需要构造一个字典来查找它。
作为进一步的例子,这就是我们如何复制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')
Run Code Online (Sandbox Code Playgroud)