2017-10-20 96 views
2

列表所以我STR名單是:轉換列表轉換的INT

col = ['cat1','cat2','cat3'] 

我想轉換成列表INT像:

col = [0,1,2] 

我想:

col=pd.Series(col) 
col=pd.to_numeric(col) 

但它給出了錯誤:

無法解析str ing 「的CAT1」 在位置0

+1

使用'山坳= [我爲I,J在枚舉(COL)]' – Dark

+2

這是什麼樣的轉換?只是位置? –

+0

如果col = ['cat4','cat2','cat3','cat2']'是什麼意思輸出? – jezrael

回答

5
In [4719]: pd.Series(col).astype('category').cat.codes 
Out[4719]: 
0 0 
1 1 
2 2 
dtype: int8 

或者,

In [4726]: pd.Series(pd.factorize(col)[0]) 
Out[4726]: 
0 0 
1 1 
2 2 
dtype: int64 

或者,

In [4738]: np.unique(col, return_inverse=True)[1] 
Out[4738]: array([0, 1, 2], dtype=int64) 

或者,

In [4739]: pd.Categorical(col).codes 
Out[4739]: array([0, 1, 2], dtype=int8) 

使用.tolist()最後,如果你需要列表。

+0

明白了吧 – Dark

+0

pd.Categorical,np.unique在sort上工作,默認情況下不是pd.factorize。 – Zero

+0

OP問的問題是怎麼回事?與所提問題匹配。也沒有要求排序因素。 – Zero

2

使用factorize

print (pd.factorize(col)[0].tolist()) 
[0, 1, 2] 

如果沒有重複的值:

a = list(range(len(col))) 
[0, 1, 2] 

而且它的工作很好,如果改變col到:

col = ['cat4','cat2','cat3', 'cat2'] 
print (pd.factorize(col)[0].tolist()) 
[0, 1, 2, 1] 

還可以獲得用第二溶液不同的輸出:

col = ['cat4','cat2','cat3', 'cat2'] 
a = list(range(len(col))) 
print (a) 
[0, 1, 2, 3] 
1

您還可以使用groupby+ngroup

col = ['cat1','cat2','cat3', 'cat2'] 
col=pd.Series(col) 

col.groupby(col).ngroup() 
 
0 0 
1 1 
2 2 
3 1 
dtype: int64 

如果您需要名單,然後

col.groupby(col).ngroup().tolist() 
[0, 1, 2, 1]