2016-10-26 1 views
0

Я пытаюсь реализовать алгоритм, в котором данная матрица (матрица представляет городов) должны быть уменьшены условием:изменить значение в приведенных матричных панд

здесь матрица (кадр данных матрицы):

  0  1  2  3  4 
    0 9992  1  0  2  0 
    1  2 99991  5  0  0 
    2  0  4 9992  0  1 
    3  3  0  1 9991  2 
    4  1  0  2  2 99989 

затем условие я удалить 0-строку и 2-столбец в матрице, так что я получаю это:

df = df.drop(2,axis=1) 
df = df.drop(0,axis=0) 
reducedMatrix=df 
    print reducedMatrix 
        0  1  3  4 
       1 2 99991  0  0 
       2 0  4  0  1 
       3 3  0 9991  2 
       4 1  0  2 99989 

и после удаления я должен изменить количество элемента (2,0) к большому числу литий KE 9999, я:

reducedMatrix[2][0]=9999 

но получаю ошибку

File "", line 81, in <module> 
    reducedMatrix[2][0]=999 
    File "", line 1997, in __getitem__ 
    return self._getitem_column(key) 
    File "", line 2004, in _getitem_column 
    return self._get_item_cache(key) 
    File "/", line 1350, in _get_item_cache 
    values = self._data.get(item) 
    File "/anaconda/lib/python2.7/site-packages/pandas/core/internals.py", line 3290, in get 
    loc = self.items.get_loc(item) 
    File "anaconda/lib/python2.7/site-packages/pandas/indexes/base.py", line 1947, in get_loc 
    return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    File "pandas/index.pyx", line 137, in pandas.index.IndexEngine.get_loc (pandas/index.c:4154) 
    File "pandas/index.pyx", line 159, in pandas.index.IndexEngine.get_loc (pandas/index.c:4018) 
    File "pandas/hashtable.pyx", line 303, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6610) 
    File "pandas/hashtable.pyx", line 309, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6554) 
KeyError: 2 

это imortant, чтобы сохранить перевалы и строк имен, так как после удаления строки я и столбец J я должен изменить значение в J, I позиция в новой матрице ожидаемый выход:

print reducedMatrix 
       0  1  3  4 
      1 2  99991 0  0 
      2 9999 4  0  1 
      3 3  0  9991 2 
      4 1  0  2  99989 

как избежать этого? thx

+3

Вы можете попробовать: 'reducedMatrix.set_value (2, 0, 9999) '? –

+1

@NickilMaveli Я пробовал это, и это сработало! Большое спасибо, спасли мой день. –

ответ

1

this что вы хотите?

reducedMatrix.loc[2][0] = 9999 

где loc используется для индексирования по этикетке.

Если вместо этого вы хотите, чтобы индекс новой строки/цв позиции, вы хотите:

reducedMatrix.iloc[2][0] = 9999 

(см this)

+0

Нет, у меня есть матрица после редукции, и я хочу установить reducedMatrix [2] [0] - 9999. После печати у меня есть матрица с именами столбцов 0 1 3 4 и имена строк 1 2 3 4, поэтому настройка (2,0) необходимо значение –

+0

, когда вы говорите reducedMatrix [2] [0], вы имеете в виду третий ряд и первый столбец? или строки 2 и столбца 0? –

+2

Почувствуйте, что вы можете написать его как 'reducedMatrix.iloc [2,0] = 9999' и заставить его работать. –

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