I have a csv file(delimiter=,) containing following fields
filename labels
xyz.png  cat
pqz.png  dog
abc.png  mouse           
there is a list containing all the classes
data-classes = ["cat", "dog", "mouse"]
Question : How to replace the string labels in csv with the index of the labels data-classes (i.e. if label == cat then label should change to 0 ) and save it in csv file.
Assuming that all classes are present in your list you can do this using apply and call index on the list to return the ordinal position of the class in the list:
In[5]:
df['labels'].apply(data_classes.index)
Out[5]: 
0    0
1    1
2    2
Name: labels, dtype: int64
However, it will be faster to define a dict of your mapping and pass this an use map IMO as this is cython-ised so should be faster:
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
If there are classes not present then NaN is returned
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With