重命名类别并将缺少的类别添加到PANDAS系列

时间:2016-07-26 13:55:04

标签: python pandas dataframe

我想重命名类别并将缺少的类别添加到系列中。

我的代码:

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

3 个答案:

答案 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将类别添加到系列中。