2016-11-18 3 views
0

У меня есть набор данных, образованный некоторыми текстовыми столбцами (с ограниченными возможностями) и некоторыми числовыми столбцами в формате csv. Есть ли способ автоматического преобразования текстовых столбцов в числа (например: A будет 0, B будет 1 и т. Д.), Чтобы преобразовать набор данных в np.array?python - преобразовать данные в массив numpy для sklearn

Это будет позже использовано на scikit-learn, поэтому оно должно быть np.array в конце всей обработки.

EDIT: Добавление одной строки набора данных:

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

Можете ли вы дать нам пример (отрывок) из файла (или «текстовые столбцы»), так что мы можем лучше понять, с чем вы работаете? 'genfromtext'' numpy' может быть хорошим местом для начала или, возможно, '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

Да, это возможно, но этот способ кажется мне намного проще. Вы можете читать свои данные в виде панда DataFrame, а затем следовать приведенной выше процедуре. Под капотом sklearn использует numpy в своей 'labelEncoder()'. Я думаю, что если вы будете читать данные в виде массива numpy, вы сможете сделать то же самое. – MhFarahani

Смежные вопросы