将带有dtype ='category'的系列作为Pandas Categorical函数的类别传递

时间:2016-09-13 10:33:45

标签: python pandas categorical-data

当我运行此代码时,我收到以下错误:

import pandas as pd

car_colors = pd.Series(['Blue', 'Red', 'Green'],
           dtype='category')

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'],
                              categories= car_colors, ordered=False)
print car_colors
s = pd.Series(car_data)
s
  

ValueError:object array 方法不生成数组

但有趣的是,当我删除dtype = 'category'时,代码运行正常。

简而言之,分类功能是接受系列而不是dtype = 'category'

这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来需要在Categorical中向tolist添加categories

car_colors = pd.Series(['Blue', 'Red', 'Green'],
           dtype='category')

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'],
                              categories = car_colors.tolist(), ordered=False)

s = pd.Series(car_data)
print (s)

0      NaN
1    Green
2      Red
3     Blue
4      NaN
dtype: category
Categories (3, object): [Blue, Red, Green]

EdChum's comment的另一个解决方案是使用cat.categories

car_data = pd.Categorical(['Yellow', 'Green', 'Red', 'Blue','Purple'],
                              categories = car_colors.cat.categories, ordered=False)
s = pd.Series(car_data)
print (s)
0      NaN
1    Green
2      Red
3     Blue
4      NaN
dtype: category
Categories (3, object): [Blue, Green, Red]