【问题标题】:How can I convert a column of a pandas dataframe containing string values to int/float?如何将包含字符串值的 pandas 数据框的列转换为 int/float?
【发布时间】:2016-02-28 15:06:49
【问题描述】:

我有一个 pandas 数据框,其中包含一个具有非数值的列。我将如何将它们转换为 int/float 值。

当量:

Col1       Col2

Lip_GD      267

Gly_hy_68   467

Hint_2      628

Jac+Jac     339

Lip_GD      234

Jac+Jac     267

当我将这些数据读入 pandas 数据帧时,如何将第 1 列转换为 int?

【问题讨论】:

  • 这是一列的内容,还是包含两列的格式错误的数据框?
  • 您的预期输出是什么?您如何将“Lip_GD”转换为浮点数?
  • 我所期望的是将唯一列值映射到一个字典中,例如:{"Lip_GD:"1,"Jac+Jac":2} 并将这个 int 值映射到数据框列中。

标签: python pandas svm


【解决方案1】:

创建Col1 中每个唯一值到索引值的映射:

mapping = {k: v for v, k in enumerate(df.Col1.unique())}
>>> mapping
{'Gly_hy_68': 1, 'Hint_2': 2, 'Jac+Jac': 3, 'Lip_GD': 0}

然后创建一个新列,将Col1 中的值映射回它们的唯一标识符。

df['Col3'] = df.Col1.map(mapping)
>>> df
        Col1  Col2  Col3
0     Lip_GD   267     0
1  Gly_hy_68   467     1
2     Hint_2   628     2
3    Jac+Jac   339     3
4     Lip_GD   234     0
5    Jac+Jac   267     3

【讨论】:

  • 这适用于我的情况。我想知道是否有办法使用 scikit 做到这一点?
  • @Krishna 请参阅下面我提出的答案,该答案使用 sklearn 将分类数据映射到数值。
【解决方案2】:

使用 Sklearn

有一种方法可以通过 sklearn 使用 LabelEncoder 来做到这一点。

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(df['Col1'])
df['Col3'] = le.transform(df['Col3'])

【讨论】:

  • 我试过这个。但它给了我一个类型错误。 TypeError:不可排序的类型:str() > float()
  • 我想这个问题与我上面给出的示例数据有关。我在这里发布这个问题之前试过这个。
猜你喜欢
  • 1970-01-01
  • 2011-07-16
  • 2018-01-18
  • 2023-02-01
  • 2017-10-13
  • 2014-07-25
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多