KeyError: "['cut'] не найден на оси" - PullRequest
0 голосов
/ 06 января 2020

Я работаю с тысячами строк данных, пытаясь сузить поиск определенных зерен. Для этого у меня есть столбец «Актив» с примерно 20 различными значениями, из которых мне нужно получить сумму всех строк в соседнем столбце «Загрузить».

Я хотел бы вырезать ненужные строки из моего набора данных. Для начала я пометил все дополнительные активы как 'cut' (как показано в примере ниже), чтобы я мог управлять одной командой .drop. Вот как это закодировано:

df14['Asset'] = df14["Asset"].str.replace('BEANS', 'cut')
df14.drop("cut", axis=0)
set(df14['Asset'])

Это ошибка, которую я получил:

KeyError                                  Traceback (most recent call last)
<ipython-input-593-40006512df80> in <module>
----> 1 df14.drop("cut", axis=0)
      2 set(df14['Asset'])

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py in drop(self, labels, axis, index, columns, level, inplace, errors)
   4100             level=level,
   4101             inplace=inplace,
-> 4102             errors=errors,
   4103         )
   4104 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in drop(self, labels, axis, index, columns, level, inplace, errors)
   3912         for axis, labels in axes.items():
   3913             if labels is not None:
-> 3914                 obj = obj._drop_axis(labels, axis, level=level, errors=errors)
   3915 
   3916         if inplace:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in _drop_axis(self, labels, axis, level, errors)
   3944                 new_axis = axis.drop(labels, level=level, errors=errors)
   3945             else:
-> 3946                 new_axis = axis.drop(labels, errors=errors)
   3947             result = self.reindex(**{axis_name: new_axis})
   3948 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in drop(self, labels, errors)
   5338         if mask.any():
   5339             if errors != "ignore":
-> 5340                 raise KeyError("{} not found in axis".format(labels[mask]))
   5341             indexer = indexer[~mask]
   5342         return self.delete(indexer)

KeyError: "['cut'] not found in axis"

Я пробовал несколько команд для удаления указанных строк, например:

df14.drop(["cut"], inplace = True) 

df14[~df14['Asset'].isin(to_drop)]
df14[df14['Asset'].str.contains('cut', na = True)]

И все они приносят одинаковые плоды.

Когда я кодирую

df14 = df14[~df14["Asset"].str.contains('BEANS')]

Он не удаляет номер загрузки, следующий за следующим столбцом, из моих окончательных расчетов .

Можно ли удалить все строки данных с определенной меткой, чтобы я мог обрезать их с 20 до 7 активов?

Спасибо

Ответы [ 3 ]

1 голос
/ 06 января 2020

pd.drop работает по столбцам или строкам. Вы даете имя столбца, чтобы удалить столбец или индекс, чтобы удалить строку. И axis=0 означает по индексу . Поскольку у вас нет индекса с именем «cut», он выдает ошибку.

Я рекомендую сделать это следующим образом:

df = df.loc[df['Asset'] != 'cut']
0 голосов
/ 06 января 2020

Это должно сделать работу. Здесь вы в основном выбираете все строки, кроме 'cut'

df14 = df14.loc [df14 ['Asset']! = 'Cut']

0 голосов
/ 06 января 2020

Я считаю, что df14.drop ("cut", axis = 0) не работает, потому что он ищет значение "cut" в индексе df14. Вы могли бы потенциально указать столбец актива в качестве индекса, чтобы узнать, как это сделать, см. Документацию pandas, но я думаю, что лучшим решением может быть что-то вроде

df14 = df14.query('asset != "cut"') 

Не могу сказать, что знаю если это самое быстрое решение, так как я обычно работаю с наборами данных small-i sh, мне не пришлось бы слишком беспокоиться о производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...