2016-11-18 43 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