2015-02-27 2 views
1

У меня есть данные в следующем формате:Панды: Преобразование столбца массива в Numpy Matrix

Col1 Col2  Col3 
1, 1424549456, "3 4" 
2, 1424549457, "2 3 4 5" 

& успешно прочитать его в панд.

Как я могу превратить COL3 в Numpy матрицу следующего вида:

# each value needs to become a 1 in the index of the col 
# i.e. in the above example 3 is the 4th value, thus 
# it is [0 0 0 1] [0 indexing is included] 
mtx = [0 0 0 1 1 0 # corresponds to first row 
     0 0 1 1 1 1]; # corresponds to second row 

Спасибо за любую помощь вы можете предоставить!

ответ

3

Since 0.13.1 есть str.get_dummies:

In [11]: s = pd.Series(["3 4", "2 3 4 5"]) 

In [12]: s.str.get_dummies(sep=" ") 
Out[12]: 
    2 3 4 5 
0 0 1 1 0 
1 1 1 1 1 

Вы должны обеспечить столбцы представляют собой целые числа (а не строки) и reindex:

In [13]: df = s.str.get_dummies(sep=" ") 

In [14]: df.columns = df.columns.map(int) 

In [15]: df.reindex(columns=np.arange(6), fill_value=0) 
Out[15]: 
    0 1 2 3 4 5 
0 0 0 0 1 1 0 
1 0 0 1 1 1 1 

Чтобы получить Numpy значения используют .values:

In [16]: df.reindex(columns=np.arange(6), fill_value=0).values 
Out[16]: 
array([[0, 0, 0, 1, 1, 0], 
     [0, 0, 1, 1, 1, 1]]) 
0

если есть не много данных, которые вы можете сделать что-то вроде

res = [] 
def f(v): 
    r = np.zeros(6, np.int) 
    r[map(int, v.split())] = 1 
    res.append(r) 
df.Col3.apply(f) 
mat = np.array(res) 

# if you really want it to be a matrix, you can do 
mat = np.matrix(res) 

ЗАКАНЧИВАТЬ this link для получения дополнительной информации

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