2014-09-21 3 views
8

У меня есть категориальная переменная в серии. Я хочу назначить целочисленные идентификаторы для каждого уникального значения и создать новую серию с идентификаторами, эффективно превращая строковую переменную в целочисленную переменную. Каков самый компактный/эффективный способ сделать это?Преобразование серии pandas из строки в уникальный int id

ответ

13

Вы можете использовать pandas.factorize:

In [32]: s = pd.Series(['a','b','c']) 

In [33]: labels, levels = pd.factorize(s) 

In [35]: labels 
Out[35]: array([0, 1, 2]) 
+2

Обратите внимание, что от 0,15 (будет выпущен в ближайшие недели), будет более комплексная категориальная поддержка, см. http://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#whatsnew-0150-cat – joris

5

Пример использования новой панды categorical типа в панд 0.15+

http://pandas.pydata.org/pandas-docs/version/0.16.2/categorical.html

In [553]: x = pd.Series(['a', 'a', 'a', 'b', 'b', 'c']).astype('category') 

In [554]: x 
Out[554]: 
0 a 
1 a 
2 a 
3 b 
4 b 
5 c 
dtype: category 
Categories (3, object): [ 
         a 
         , b 
         , c] 

In [555]: x.cat.codes 
Out[555]: 
0 0 
1 0 
2 0 
3 1 
4 1 
5 2 
dtype: int8 
Смежные вопросы