如何将字符串标签转换为数字值

时间:2017-06-12 09:34:21

标签: python python-2.7 csv pandas

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

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

有一个包含所有类的列表

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

问题:如何使用标签data-classes的索引替换csv中的字符串标签(例如,如果label == cat然后标签应该更改为0)并将其保存在csv文件中。

1 个答案:

答案 0 :(得分:5)

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

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

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

但是,定义映射的dict会更快,并将其传递给map IMO使用,因为这是cython-ised所以应该更快:

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