Python 如何将字符串标签转换为数值
我有一个csv文件(分隔符=,)包含以下字段Python 如何将字符串标签转换为数值,python,python-2.7,csv,pandas,Python,Python 2.7,Csv,Pandas,我有一个csv文件(分隔符=,)包含以下字段 filename labels xyz.png cat pqz.png dog abc.png mouse 有一个包含所有类的列表 data-classes = ["cat", "dog", "mouse"] 问题:如何用标签数据类的索引替换csv中的字符串标签(即,如果label==cat,则标签应更改为0)并将其保存在csv文件中。假设列表中存在所有类,则可以使用apply并调用列表中的index返回类在列表中的顺
filename labels
xyz.png cat
pqz.png dog
abc.png mouse
有一个包含所有类的列表
data-classes = ["cat", "dog", "mouse"]
问题:如何用标签数据类的索引替换csv中的字符串标签(即,如果
label==cat
,则标签应更改为0)并将其保存在csv文件中。假设列表中存在所有类,则可以使用apply
并调用列表中的index
返回类在列表中的顺序位置:
In[5]:
df['labels'].apply(data_classes.index)
Out[5]:
0 0
1 1
2 2
Name: labels, dtype: int64
但是,定义映射的dict并将其传递给usemap
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
这是您要找的吗?无论如何,我建议使用pandas来读写csv相关的可能的副本:LabelEncoder不适用于。apply(data_classes.index)
我得到TypeError:“RangeIndex”对象是不可调用的
@RishabhAgrahari这对我仍然有效,所以我不能评论,除非你发布一个带有完整可复制示例的新问题