2015-10-24 2 views
1

У меня есть простой код для поиска похожих строк в наборе данных.Преобразование объекта panda в массив numpy

h=0 
count=0 
#227690 
deletedIndexes=np.zeros((143,)) 
len(data) 
for i in np.arange(len(data)): 
    if(data[i-1,2]==data[i,2]): 
     similarIndexes[h]=int(i) 
     h=h+1   
     count=count+1 
     print("similar found in -->", i," there are--->", count) 

Она работает правильно, когда данные являются numpy.ndarray Но если данные объекта панда, я даю следующую ошибку:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "<stdin>", line 7, in smilarData 
    File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1658, in __getitem__ 
return self._getitem_column(key) 
    File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1665, in _getitem_column 

возврата self._get_item_cache (ключ)

File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 1005, in _get_item_cache 
values = self._data.get(item) 



File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 2874, in get 
_, block = self._find_block(item) 



File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 3186, in _find_block 
self._check_have(item) 



File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 3193, in _check_have 


raise KeyError('no item named %s' % com.pprint_thing(item)) 
KeyError: u'no item named (-1, 2)' 

Что мне делать, чтобы использовать этот код? Если преобразование объекта panda в массив numpy полезно, как я могу это сделать?

+0

Вы можете просто позвонить '.values' на ФР, чтобы получить ФР в виде массива нп' df.values' будет работать – EdChum

ответ

1

пока не могу комментировать ответить Adrienne таким образом я хотел бы добавить, что dataframes имеют встроенный метод для преобразования ДФА в массив т.е. матриц

>>> df = pd.DataFrame({"a":range(5),"b":range(5,10)}) 
>>> df 
    a b 
0 0 5 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
>>> mat = df.as_matrix() 
array([[0, 5], 
     [1, 6], 
     [2, 7], 
     [3, 8], 
     [4, 9]]) 
>>>col = [x[0] for x in mat] # to get certain columns 
>>> col 
[0, 1, 2, 3, 4] 

также находить дублирующиеся строки, которые вы можете сделать:

>>> df2 
    a b 
0 0 5 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 0 5 
>>> df2[df2.duplicated()] 
    a b 
5 0 5 
1

Чтобы преобразовать панда dataframe в Numpy массива:

import numpy as np 
np.array(dataFrame) 
0

Я подписываться на предыдущие ответы, но если вы хотите напрямую работать с объектами pandas, доступ к элементам DataFrame имеет свой особый путь. В своем коде вы должны сказать, например.

if(data.iloc[i-1,2]==data.iloc[i,2]): 

Смотрите documentation более