python以高效的方式将字符串转换为int / float

时间:2013-06-26 17:02:01

标签: python string int type-conversion

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

我不是指简单的int(字符串,基础)。我的意思是一个程序,比如通过所有字符串,然后说“啊哈,所以让我们分配给这个字符串,例如'int / float-key'”。

最有效的方法是什么?

2 个答案:

答案 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}