KeyError: 1.0 после переименования столбцов фрейма данных - PullRequest
0 голосов
/ 13 июля 2020

Следующий скрипт:

import pandas as pd
import numpy as np
import math

A = pd.DataFrame(np.array([[1,2,3,4],[5,6,7,8]]))

Floor1 = math.floor(A.min()[1]/2)*2

names = np.array([ 0.   ,  0.635,  1.27 ,  1.905])

A.columns = names

Floor2 = math.floor(A.min()[1]/2)*2

Floor1 выполняется правильно, Floor2, который выполняется с тем же df, но с переименованными столбцами, - нет. Я получаю ключевую ошибку:

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2646, in get_loc
    return self._engine.get_loc(key)

  File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\hashtable_class_helper.pxi", line 385, in pandas._libs.hashtable.Float64HashTable.get_item

  File "pandas\_libs\hashtable_class_helper.pxi", line 392, in pandas._libs.hashtable.Float64HashTable.get_item

KeyError: 1.0


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\Users\Desktop\Python\untitled0.py", line 13, in <module>
    Floor2 = math.floor(A.min()[1]/2)*2

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 871, in __getitem__
    result = self.index.get_value(self, key)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\numeric.py", line 449, in get_value
    loc = self.get_loc(k)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\numeric.py", line 508, in get_loc
    return super().get_loc(key, method=method, tolerance=tolerance)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2648, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))

  File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\hashtable_class_helper.pxi", line 385, in pandas._libs.hashtable.Float64HashTable.get_item

  File "pandas\_libs\hashtable_class_helper.pxi", line 392, in pandas._libs.hashtable.Float64HashTable.get_item

KeyError: 1.0

Я знаю, есть аналогичный вопрос: После переименования столбца появляется ошибка ключа

Но я действительно не получил ответа и - что еще важнее - как ее решить.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Перед переименованием, если вы получите столбцы A с использованием list(A.columns), вы увидите, что вы получите список [0,1,2,3]. Таким образом, вы можете индексировать с помощью ключа 1. Однако после переименования вы больше не можете индексировать с помощью ключа 1, потому что имена столбцов изменились.

1 голос
/ 13 июля 2020

Если вы используете A.min(), вы найдете минимальное значение в axis=0 по по умолчанию , которое находится вдоль столбцов.
При изменении имен столбцов вы не можете получить доступ к индексу '1' как в столбцах нет индекса с именем «1».

Если ваше намерение находит минимум в строке , вы можете использовать A.min(axis=1).

Вы можете написать такой код.

import pandas as pd
import numpy as np
import math

A = pd.DataFrame(np.array([[1,2,3,4],[5,6,7,8]]))

Floor1 = math.floor(A.min(axis=1)[1]/2)*2

names = np.array([ 0.   ,  0.635,  1.27 ,  1.905])

A.columns = names

Floor2 = math.floor(A.min(axis=1)[1]/2)*2

Спасибо

...