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

T T*_*T T 1 python csv python-2.7 pandas

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

filename labels
xyz.png  cat
pqz.png  dog
abc.png  mouse           
Run Code Online (Sandbox Code Playgroud)

有一个包含所有类的列表

data-classes = ["cat", "dog", "mouse"]
Run Code Online (Sandbox Code Playgroud)

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

EdC*_*ica 5

假设列表中存在所有类,则可以使用apply并调用index列表来返回该类在列表中的顺序位置:

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

Out[5]: 
0    0
1    1
2    2
Name: labels, dtype: int64
Run Code Online (Sandbox Code Playgroud)

但是,定义映射的字典并通过mapIMO 传递给IMO会更快,因为这是赛顿化的,因此应该更快:

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
Run Code Online (Sandbox Code Playgroud)

如果不存在类,则NaN返回