Ошибка ключа, панды делают странные вещи

#python #pandas #keyerror

#python #панды #ошибка ключа

Вопрос:

Я несколько дней искал эту ошибку, и никаких улучшений не было. Похоже, что pandas выполняет итерацию фрейма данных, а затем еще раз. Однако кажется, что когда ключи повторяются на определенной итерации, возникает KeyError . Может ли все это быть проблемой интерпретатора или в моем коде ошибка? Любая помощь будет принята с благодарностью.

Больше контекста:

  • Подмножество features_df: https://www.transfernow.net/3yS7pE092020

  • Параметр, переданный в функцию: np.array идентификаторов ( dtype=int ), которые будут просматриваться в наборе данных

Вот вам код:

 def extract_features(id_arr):
features_df = pd.read_csv(r'D:fma_metadatafeatures.csv', index_col=0, na_values=['NA'], encoding='utf-8')
features = np.array(features_df.columns)
id_arr = np.asarray(id_arr, dtype=int)

for id in id_arr:
    row_features = []

    for key, value in features_df.iteritems():
        number = float(features_df[key][id])
        row_features.append(round(number, 6))

    row_features = np.asarray(row_features)
    features = np.vstack((features, row_features))

features = np.delete(features, 0, 0)

return features


random_id = get_random_id()

extract_features(random_id)
  

Ошибка:

   Traceback (most recent call last):
  File "C:/Users/*****/PycharmProjects/****/emotions-nn/deep-learning/input.py", line 65, in <module>
    print(extract_features(random_id))
  File "C:/Users/*****/PycharmProjects/****/emotions-nn/deep-learning/input.py", line 51, in extract_features
    number = float(features_df[key][id])
  File "C:Users*****anaconda3envstensorflowlibsite-packagespandascoreseries.py", line 882, in __getitem__
    return self._get_value(key)
  File "C:Users*****anaconda3envstensorflowlibsite-packagespandascoreseries.py", line 991, in _get_value
    loc = self.index.get_loc(label)
  File "C:Users*****anaconda3envstensorflowlibsite-packagespandascoreindexesbase.py", line 2891, in get_loc
    raise KeyError(key) from err
KeyError: 800
  

Комментарии:

1. не могли бы вы опубликовать подмножество вашего файла .csv и пример параметра random_id, я не могу воспроизвести ошибку с текущим примером кода

Ответ №1:

Я предполагаю, что это может быть ваш многоуровневый индекс.

 # ids can be a list of integers too
def extract(ids: np.ndarray):
    # assuming the first 3 rows are "headers"
    df = pd.read_csv(r"C:UsersdanieDownloadsfeatures - subset.csv", header=[0,1,2], index_col=0, na_values=['NA'])

    # you can set a breakpoint here to see the current column order
    # print(df.columns)
    # and reorganize the way you want it

    # this is basically what you're trying to do if I'm not mistaken
    return df.loc[ids].round(6).to_numpy()

    # if there's a column order
    return df.loc[ids, order].round(6).to_numpy()
  

Комментарии:

1. Большое вам спасибо @dbokers . Это сработало! Я также не знал о df.loc, так что спасибо и за это