2014-09-21 11 views
8

Mam zmienną kategoryczną w serii. Chcę przypisać liczbę całkowitą do każdej unikalnej wartości i utworzyć nową serię z identyfikatorami, skutecznie zamieniając zmienną łańcuchową na zmienną całkowitą. Jaki jest najbardziej kompaktowy/wydajny sposób na zrobienie tego?Konwersja serii pand ze stringów na unikalne int

Odpowiedz

13

Można użyć 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

pamiętać, że od 0.15 (ma zostać wydany w najbliższych tygodniach), będzie bardziej zintegrowane wsparcie kategoryczne, zobacz http://pandas-docs.github.io/pandas-docs-travis/whatsnew.html#whatsnew-0150-cat – joris

5

przykład za pomocą nowej Pandy categorical typu w pand 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