在python或numpy或pandas中,如何将整数分配给字符串

时间:2014-07-03 20:38:22

标签: python numpy pandas

我的问题是,如果在大熊猫的数据框中,我有一个这样的列, ['black'。'black','red','orange','red']。我需要将此数组转换为[1,1,2,3,2]

如何在python中进行此操作(在numpy或pandas中是否有任何标准操作)

4 个答案:

答案 0 :(得分:1)

pandas有一个map函数用于执行此操作,因此您只需执行以下操作:

In [71]:

df = pd.DataFrame({'col':['black','black','red','orange','red']})
df
Out[71]:
      col
0   black
1   black
2     red
3  orange
4     red

[5 rows x 1 columns]
In [74]:

col_map = {'black':1,'red':2,'orange':3}
df['col_id'] = df['col'].map(col_map)
df
Out[74]:
      col  col_id
0   black       1
1   black       1
2     red       2
3  orange       3
4     red       2

[5 rows x 2 columns]

这会分配一个新列' col_id'到你的数据帧并将字符串值映射到它们的int对应物。

答案 1 :(得分:0)

Factor课程可以帮助您。 This answer似乎是关于你正在寻找的东西。

答案 2 :(得分:0)

使用OrderedDict保留列表顺序,但删除重复项:

>>> l = ['black', 'black','red','orange','red']
>>> from collections import OrderedDict
>>> [OrderedDict.fromkeys(l).keys().index(i) + 1 for i in l]
[1, 1, 2, 3, 2]

答案 3 :(得分:0)

numpy的答案是带有return_inverse

的np.unique
>>> np.unique(['black','black','red','orange','red'], return_inverse=True)
(array(['black', 'orange', 'red'], 
      dtype='|S6'), array([0, 0, 2, 1, 2]))

这将整数分配给按字母顺序排序的唯一内容。