我想重命名类别并将缺少的类别添加到系列中。
我的代码:
codedCol = bdAu['Bordersite']
print 'pre:'
print codedCol.head(10)
codedCol = codedCol.astype('category')
codedCol = codedCol.cat.set_categories(['a','b','c','d','e','f','g','h','i','j'])
print 'post:'
print codedCol.head(10)
当我这样做时,我得到了NaN作为结果。
pre:
0 3
1 3
2 2
3 2
4 3
5 4
6 5
7 3
8 3
9 3
Name: Bordersite, dtype: int64
post:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
dtype: category
Categories (10, object): [a, b, c, d, ..., g, h, i, j]
我在这里做错了什么?
由于 Kheeran
答案 0 :(得分:2)
首先或创建catagories
,您可以使用.astype('category')
,但会从您的列添加categories
,或Categorical
添加参数categories
,其中已定义。
您可以使用:
codedCol = bdAu['Bordersite']
codedCol = pd.Series(pd.Categorical(codedCol, categories=[0,1,2,3,4,5,6,7,8,9]))
print (codedCol)
0 3
1 3
2 2
3 2
4 3
5 4
6 5
7 3
8 3
9 3
dtype: category
Categories (10, int64): [0, 1, 2, 3, ..., 6, 7, 8, 9]
然后rename_categories
,但类别中的项目数必须相同,否则错误:
ValueError:新类别需要具有与旧类别相同数量的项目!
codedCol = codedCol.cat.rename_categories(['a','b','c','d','e','f','g','h','i','j'])
print (codedCol)
0 d
1 d
2 c
3 c
4 d
5 e
6 f
7 d
8 d
9 d
dtype: category
Categories (10, object): [a, b, c, d, ..., g, h, i, j]
答案 1 :(得分:1)
您已将类别设置为以下内容:['a','b','c','d','e','f','g','h','i','j']
。 codedCat
中列中的当前值与任何类别都不匹配。因此,它们会重新设置为NaN
。如需进一步阅读,请考虑此示例from the docs:
In [10]: raw_cat = pd.Categorical(["a","b","c","a"], categories=["b","c","d"],
....: ordered=False)
....:
In [11]: s = pd.Series(raw_cat)
In [12]: s
Out[12]:
0 NaN
1 b
2 c
3 NaN
dtype: category
Categories (3, object): [b, c, d]
由于"a"
不是类别,因此会重新设置为NaN
。
答案 2 :(得分:0)
使用add_categories
将类别添加到系列中。