2017-06-12 19 views
0

数値(区切り記号=、)を含む次のフィールド私はcsvファイルを持っている

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

すべてのクラスに

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

質問を含むリストがあるに文字列のラベルを変換する方法:どのようにcsvの文字列ラベルをラベルデータクラスのインデックスに置き換えます(つまり、label == catならラベルを0に変更する必要があります)。これをcsvファイルに保存します。

+0

これはあなたのお探しですか?私はとにかくパンダを使ってcsvを読んで書くことにアドバイスするだろうhttp://fastml.com/converting-categorical-data-into-numbers-with-pandas-and-scikit-learn/ – Roelant

+0

関連性のあると思われるdupe:https:/ /stackoverflow.com/questions/31133192/usng-same-label-encoder-to-test-dataset-or-new-label-encoder – EdChum

+0

LabelEncoderが機能しません –

答えて

3

すべてのクラスは、あなたがapplyを使用して、これを行うと、リスト内のクラスの順序位置を返すために、リスト上のindexを呼び出すことができ、あなたのリストに存在していると仮定すると:

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

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

しかし、それがより速くなるでしょう。あなたのマッピングの辞書を定義し、この使用mapを渡すために、これはcython-isedである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 

を、その後NaNが返される存在しないクラスがある場合

関連する問題