我有一个numpy数组
z = array(['Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa','Iris-versicolor', 'Iris-versicolor', 'Iris-versicolor','Iris-virginica', 'Iris-virginica', 'Iris-virginica'])
我想替换
Iris-setosa -0
Iris-versicolor - 1
Iris-virginica - 2
应用逻辑回归。
最终输出应该是
z = [ 0, 0 ,.. 1,1,.. 2,2,..]
是否有一种简单的方法来执行此操作,而不是遍历数组并使用replace命令?
答案 0 :(得分:5)
使用factorize
:
a = pd.factorize(z)[0].tolist()
print (a)
[0, 0, 0, 0, 1, 1, 1, 2, 2, 2]
a = np.unique(z, return_inverse=True)[1].tolist()
print (a)
[0, 0, 0, 0, 1, 1, 1, 2, 2, 2]
答案 1 :(得分:2)
你可以使用字典:
my_dict = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
然后使用list comprehension:
z = [my_dict[zi] for zi in z]
答案 2 :(得分:0)
您是否在尝试进行逻辑回归时计算出现次数?
如果是,您也可以使用以下内容。
import collections
z = ['Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa','Iris-versicolor', 'Iris-versicolor', 'Iris-versicolor','Iris-virginica', 'Iris-virginica', 'Iris-virginica']
print (collections.Counter(z))
将打印如下:
Counter({'Iris-setosa': 4, 'Iris-versicolor': 3, 'Iris-virginica': 3})
如果您想以其他方式打印,可以执行以下操作:
import collections
z = ['Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa','Iris-versicolor', 'Iris-versicolor', 'Iris-versicolor','Iris-virginica', 'Iris-virginica', 'Iris-virginica']
for item in collections.Counter(z):
print(str(item)+ ' ' + str(collections.Counter(z)[item]))
输出
Iris-setosa 4
Iris-versicolor 3
Iris-virginica 3
答案 3 :(得分:-1)
[list(set(z)).index(val) for val in z]
简单地说,从z中投出一组来获得唯一的值,然后从该集合中列出一个列表用于索引,然后最终使用列表推导来获得最终列表。如果你有一个非常大的字符串列表,我建议将列表(set(z))设置为列表理解之外的变量