0

我有一个包含(非唯一)字符串的数组(在 numpy 或 pandas 中)。其中一些是写成字符串的整数,一些由数字和字母组成。我想做的是将这些字符串映射到(一些)int 或 float 值,以便进一步处理它们。

我的意思不是简单的 int(string,base)。我的意思是一个过程,比如说遍历所有的字符串,然后说“啊哈,所以让我们给这个字符串分配这样的‘int/float-key’”。

这样做最有效的方法是什么?

4

2 回答 2

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
于 2013-06-26T17:14:51.783 回答
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)为您获取唯一值xrange(len(x_set))提供从 0 到len(x_set)-1. 使用任何你想要的 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}
于 2013-06-26T17:24:44.130 回答