【问题标题】:How to convert string labels to numeric values如何将字符串标签转换为数值
【发布时间】:2017-11-13 17:31:39
【问题描述】:

我有一个包含以下字段的 csv 文件(delimiter=,)

filename labels
xyz.png  cat
pqz.png  dog
abc.png  mouse           

有一个包含所有类的列表

data-classes = ["cat", "dog", "mouse"]

问题:如何将 csv 中的字符串标签替换为标签数据类的索引(即如果 label == cat 则标签应更改为 0 )并将其保存在 csv 文件中。

【问题讨论】:

标签: python python-2.7 csv pandas


【解决方案1】:

假设所有类都存在于您的列表中,您可以使用 apply 执行此操作并在列表中调用 index 以返回该类在列表中的序号位置:

In[5]:
df['labels'].apply(data_classes.index)

Out[5]: 
0    0
1    1
2    2
Name: labels, dtype: int64

但是,定义映射的字典并将其传递给 use map IMO 会更快,因为这是 cython 化的,所以应该更快:

In[7]:
d = dict(zip(data_classes, range(0,3)))
d

Out[7]: {'cat': 0, 'dog': 1, 'mouse': 2}

In[8]:
df['labels'].map(d, na_action='ignore')

Out[8]: 
0    0
1    1
2    2
Name: labels, dtype: int64

如果没有类,则返回NaN

【讨论】:

  • 对于.apply(data_classes.index) 我得到TypeError: 'RangeIndex' object is not callable
  • @RishabhAgrahari 这仍然对我有用,所以除非您发布一个带有完整可重现示例的新问题,否则我无法发表评论
  • @EdChum data_classes 与问题中的数据类相同吗?
  • 我正在尝试将您的代码采用到我的代码中,但它说“Int64Index”对象不可调用,有什么办法可以克服这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2014-04-26
  • 2021-03-03
相关资源
最近更新 更多