python seaborn不使用的类别名称

时间:2015-10-24 21:39:07

标签: python python-3.x seaborn

我正在尝试使用有意义的类别名称进行countplot。数据集使用整数作为类别的代码,这些整数值显示在图中,而不是我指定的名称。

import pandas
# bug fix
pandas.set_option('display.float_format', lambda x:'%f'%x)
import seaborn
import matplotlib.pyplot

s = pandas.Series([1,2,3,1,2,3,1])
print(s)
s = s.astype('category')
print(s)
s.cat.rename_categories(["A", "B", "C"])
print(s)

seaborn.countplot(x = s)

此代码生成一个原始类别值为1,2和3的图。我想要A,B和C。

plot produced

print(s)输出为:

0    1
1    2
2    3
3    1
4    2
5    3
6    1
dtype: int64
0    1
1    2
2    3
3    1
4    2
5    3
6    1
dtype: category
Categories (3, int64): [1, 2, 3]
0    1
1    2
2    3
3    1
4    2
5    3
6    1
dtype: category
Categories (3, int64): [1, 2, 3]

所以它正在改变数据类型但不改变值。但是,当我以交互方式重命名时,我得到以下内容,但print(s)仍会返回数字名称。

In[108]: s.cat.rename_categories(["A", "B", "C"])
Out[108]: 
0    A
1    B
2    C
3    A
4    B
5    C
6    A
dtype: category
Categories (3, object): [A, B, C]

如何使用字母而不是数字?

1 个答案:

答案 0 :(得分:2)

s.cat.rename_categories(["A", "B", "C"])(与大多数pandas操作一样,除非他们接受inplace=True选项)生成 new 对象。它不会更改您已有的s,因此您根本没有分配任何新名称。您还需要分配结果:

>>> s = s.cat.rename_categories(["A", "B", "C"])
>>> s
0    A
1    B
2    C
3    A
4    B
5    C
6    A
dtype: category
Categories (3, object): [A, B, C]
>>> seaborn.countplot(x=s)

给了我

example countplot