2016-11-18 322 views
0

我有一個數據集由一些文本列(有限的可能性)和一些csv格式的數字列組成。有什麼方法可以自動將文本列轉換爲數字(例如:A將爲0,B將爲1等等)以將數據集轉換爲np.arraypython - 將數據轉換爲numpy數組sklearn

這將稍後在scikit-learn上使用,所以在所有處理結束時它需要爲np.array

編輯:添加數據集的一行:

ENABLED;ENABLED;10;MANUAL;ENABLED;ENABLED;1800000;OFF;0.175;5.0;0.13;OFF;NEITHER;ENABLED;-65;2417;"wifi01";65;-75;DISCONNECTED;NO;NO;2621454;432477;3759;2.2436838539123705E-6; 
+0

您能給我們從文件(或「文本列」)的例子(節選),所以我們可以更好地理解你在使用什麼? 'numpy'的'genfromtext'可能是一個很好的開始,或者可能是'pandas.read_csv' ... – mgilson

+0

已被添加到說明中。每個文本列可能有3或4個可能的值。 – Minoru

回答

1

您可以申請sklearn.preprocessing.labelEncoder()每個文本列。這裏是一個例子:

import pandas as pd 
df = pd.DataFrame({'col1': [1,2,3,4,5], 
        'col2': ['ON','ON','OFF','OFF','ON']}) 
from sklearn.preprocessing import LabelEncoder 
lb = LabelEncoder() 
df['encoded'] = lb.fit_transform(df.col2) 
df 

    col1 col2 encoded 
0 1 ON  1 
1 2 ON  1 
2 3 OFF 0 
3 4 OFF 0 
4 5 ON  1 

我剛剛在另一列添加數值,但你可以替換它們。此外,你可以將它們轉換成numpy數組:

df.as_matrix() 
array([[1, 'ON', 1], 
     [2, 'ON', 1], 
     [3, 'OFF', 0], 
     [4, 'OFF', 0], 
     [5, 'ON', 1]], dtype=object) 

這裏是你如何編碼numpy。在這個例子中,我只是路過一個Python列表:

alist = ['ON','ON','OFF','OFF','ON'] 
uniqe_values , y = np.unique(alist, return_inverse=True) 
print uniqe_values 
print y 

的結果是:

['OFF' 'ON'] 
[1 1 0 0 1] 
+0

沒有熊貓可以嗎?不過,希望轉變。 – Minoru

+0

是的,這是可能的,但這種方式對我來說似乎更簡單。您可以將數據作爲熊貓數據框讀取,然後按照上述步驟進行操作。在引擎蓋下,sklearn在'labelEncoder()'中使用numpy。我認爲如果你將數據作爲numpy數組讀取,你應該可以做同樣的事情。 – MhFarahani