我有一个看起来像这样的数组:
myarray = array([list(['string4', 'string2', 'string3']),list(['string1', 'string2', 'string4', 'string5']), list(['string1', 'string2', 'string4'])], dtype=object)
如何将单个字符串编码为整数?我有一个很大的数据集。我将如何最有效地做到这一点?我想要看起来像这样的东西:
myarrayencoded = [[4,2,3],[1,2,4,5],[1,2,4]]
注意:由于整数的位置很重要,因此我无法对任何内容进行排序。另外,每个子列表可能包含不同数量的字符串。
我非常感谢您的帮助!
答案 0 :(得分:1)
您可以通过pd.factorize
使用熊猫,熊猫内部使用哈希算法。
import pandas as pd
import numpy as np
myarray = np.array([list(['string4', 'string2', 'string3']),
list(['string1', 'string2', 'string4', 'string5']),
list(['string1', 'string2', 'string4'])], dtype=object)
flattened = np.concatenate(myarray) # flatten array of lists
idx_split = np.array(list(map(len, myarray))).cumsum()[:-1] # calculate split indices
factored = pd.factorize(flattened, sort=True)[0] + 1 # factorize, sort, start from 1
res = [i.tolist() for i in np.array_split(factored, idx_split)] # return list of lists
print(res)
[[4, 2, 3], [1, 2, 4, 5], [1, 2, 4]]