我有一个包含(非唯一)字符串的数组(在numpy或pandas中)。其中一些是作为字符串写的整数,一些包括数字和字母。我想要做的是将这些字符串映射到(某些)int或float值,以便进一步处理它们。
我不是指简单的int(字符串,基础)。我的意思是一个程序,比如通过所有字符串,然后说“啊哈,所以让我们分配给这个字符串,例如'int / float-key'”。
最有效的方法是什么?
答案 0 :(得分:2)
听起来你有一个带有各种字符串的pandas DataFrame要转换为索引值,这样每个唯一字符串都有一个唯一的整数值。
numpy.unique
做你需要的。 (你已经提到过你正在使用numpy,所以我将发布一个numpy解决方案。)
例如:
import numpy as np
import pandas
df = pandas.DataFrame(dict(x=['1', 'a5', 'cde9', '1', 'cde9']))
unique_vals, df['keys'] = np.unique(df.x, return_inverse=True)
print df
答案 1 :(得分:2)
如果查看此内容的人有类似的需求,但有正常的字符串列表,如:
x = ['1', 'a5', 'cde9', '1', 'cde9']
您可以使用字典理解来构建将字符串映射到唯一ID的字典,如下所示:
x_set = set(x)
dict = {z:id for z,id in zip(x_set,range(len(x_set)))}
set(x)
为您提供x
中的唯一值,range(len(x_set))
提供从0到len(x_set)-1
的唯一ID。使用您想要的任何ID序列。
示例:
>>> x = ['1', 'a5', 'cde9', '1', 'cde9']
>>> x_set = set(x)
>>> x_set
set(['1', 'cde9', 'a5'])
>>> dict = {z:id for z,id in zip(x_set,range(len(x_set)))}
>>> dict
{'1': 0, 'cde9': 1, 'a5': 2}