将str列表转换为int列表

时间:2017-10-20 06:57:11

标签: python-2.7 pandas

所以我的str列表是:

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

我想转换成int列表,如:

col = [0,1,2]

我试过了:

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

但它给出了错误:

无法解析字符串" cat1"在第0位

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

使用factorize

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]

使用第二种解决方案获得不同的输出:

private void ReplyToMail(Outlook.MailItem mailItem)
{
  //mailItem is the mail you wand to reply to
   Outlook.MailItem replyMail = mailItem.Reply();
  //you can use replyAll insted
   replyMail.Body = "the mail body text";
   ((Outlook._MailItem)replyMail).Send();
}

答案 2 :(得分:1)

您也可以使用col = ['cat1','cat2','cat3', 'cat2'] col=pd.Series(col) col.groupby(col).ngroup()

col.groupby(col).ngroup().tolist()
[0, 1, 2, 1]
0    0
1    1
2    2
3    1
dtype: int64

如果您需要清单,那么

pthread_t