【问题标题】:python strings to int/float in an efficient way [closed]以有效的方式将python字符串转换为int/float [关闭]
【发布时间】:2013-06-26 17:02:00
【问题描述】:

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

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

最有效的方法是什么?

【问题讨论】:

  • 如何从包含数字和字母的字符串中获取整数或浮点数?忽略字母?以某种方式解析它们?你没有告诉我们足够的答案来回答这个问题。此外,您应该向我们展示您当前的代码以及它失败的地方(不会产生您需要的结果,或者抛出和异常)。
  • @Lattyware 一口气其中一些是写成字符串的整数甚至可以涵盖“十二”:)
  • 或者你只是想创建一个字典?
  • 如果您要问如何将字符串转换为 int 或如何为每个任意字符串获取唯一整数,您的问题并不清楚。例如,假设您有['1', 'a5', 'cde9', '1', 'cde9']。您希望结果为[1, 5, 9, 1, 9] 还是[0, 1, 2, 0, 2]
  • @SimonRighley - 抱歉,编辑仍不清楚。能举个具体的例子吗?

标签: python string int type-conversion


【解决方案1】:

听起来你有一个带有各种字符串的 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

【讨论】:

  • 谢谢!这就是我想要的。
【解决方案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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2012-06-15
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多