【问题标题】:Convert Object Column to integer or float将对象列转换为整数或浮点数
【发布时间】:2021-07-20 00:23:07
【问题描述】:

我有一个看起来像这样的数据集...(这里的问题缩写)。

DataFrame Name = ObjectIntTest

Most of the columns/labels are varios objects

标签 ISIN = 各种 ISIN,例如 IE00B3XXRP09、IE00BF553838、LU0950668870

要运行逻辑回归,我需要将各种 ISIN 转换为整数 (对于 ISIN IE00B3XXRP09 和 IE00BF553838,整数/浮点数始终需要相同)

我尝试了类似这些的各种方法,但我只得到错误:

ObjectIntTest['ISIN'] = ObjectIntTest.ISIN.astype(int) = ValueError: invalid literal for int() with base 10: 'IE00B3XXRP09'

ObjectIntTest['ISIN'] = ObjectIntTest['ISIN'].astype(float) = ValueError: could not convert string to float: 'IE00B3XXRP09'

ObjectIntTest['ISIN'] = ObjectIntTest['ISIN'].astype(str).astype(int) = ValueError: invalid literal for int() with base 10: 'IE00B3XXRP09'

ObjectIntTest = pd.to_numeric(ObjectIntTest['ISIN']) = ValueError: Unable to parse string "IE00B3XXRP09" at position 0

抱歉,我是 python 和编程新手,但需要找到解决方案,以使这些数据可用于逻辑回归... 感谢您的帮助。

【问题讨论】:

  • 嗨,Joe,您的 ISIN 代码包含字母和数字。这就是导致值错误的原因。
  • 感谢 Lukas,但我无法更改,因为那是国际证券识别号。
  • 您需要使用适当的散列函数,因为 ISIN 值无法转换为 int/float。
  • @joe5555 能不能把图片链接换成转录的文字,因为图片很模糊,也可能用不了多久。
  • @AshokArora:完成,感谢您的帮助。没有更好的解决方案吗,因为原始文件中有大约 500 个不同的 ISIN

标签: python object type-conversion integer


【解决方案1】:

ISIN 似乎是一个分类特征,因此用整数表示它(您可以对其进行比较和算术运算)可能会导致问题。

通常使用其中一种编码技术对分类值进行编码,最流行的是 One Hot Encoding 和 Label Encoding。标签编码将每个唯一的分类值映射到一个整数(考虑到我所说的,这并不是很好),而 One Hot 用 N 列替换您的分类列,每列包含值 [0, 1] 之一并表示可能的唯一分类之一价值。您可能想了解更多信息,例如 here

如果您的 ISIN 列中没有大量唯一值,One Hot 更适合。您可以在分类列上使用 pandas.get_dummies 来应用 One Hot 编码。

【讨论】:

    【解决方案2】:

    有两种方法可以解决这个问题:

    1. 使用使用 Python 字典的键值映射将 int 映射到 string

    2. 使用单独的散列函数,例如 Python 的内置 hash。例如。

    >>> hash('IE00B3XXRP09')
    2571740993647531361
    
    >>> type(hash('IE00B3XXRP09'))
    <class 'int'>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多