我有一些数据集由一些文本列(具有有限的可能性)和一些csv格式的数字列组成。有没有办法自动将文本列转换为数字(例如:A将为0,B将为1,依此类推)将数据集转换为np.array
?
稍后会在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 :(得分: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]