TypeError: unhashable тип: 'фрагмент' столбец панд DataFrame - PullRequest
0 голосов
/ 14 ноября 2018

Это, вероятно, просто, но я не могу найти объяснение, и это происходит со мной все время.

Я пытаюсь выбрать значения из столбца Rate1E, которые превышают 3.5, и просмотреть остальные строки в пандах DataFrame energy для выбранных строк, соответствующих критериям, как указано выше. Кто-то раньше давал мне ответ и просто изменил текст следующим образом:

energy = energy.loc[energy[:, 'Rate1E'] >= 3.5]
print(energy.loc[:, 'Rate1E'])

Однако снова я обнаружил себя с ошибкой:

TypeError: unhashable type: 'slice'

Интернет решения предлагают .loc - это ответ. Кто-нибудь знает, как исправить код, или еще лучше, объясните мне, почему я всегда получаю эту ошибку.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Ваш вызов energy[:, 'Rate1E'] делает нечто иное, чем вы ожидаете. Вы ищете .loc[] звонок.

energy = energy.loc[energy['Rate1E'] >= 3.5]
print(energy['Rate1E'])
0 голосов
/ 14 ноября 2018

Ваш синтаксис неверен. Вам нужно:

energy = energy.loc[energy['Rate1E'] >= 3.5]

В качестве альтернативы:

energy = energy.loc[energy.loc[:, 'Rate1E'] >= 3.5]

Важнейшим моментом является energy.loc[:, 'Rate1E'] и energy['Rate1E'] - серии, причем последний является удобным способом доступа к первому.

К сожалению, в документации Pandas не указаны точно разрешенные аргументы для pd.DataFrame.__getitem__, для которых df[] является синтаксическим сахаром. Наиболее популярные применения:

  • Укажите строку для серии.
  • Укажите список, чтобы задать фрейм данных.
  • Предоставьте логическую серию для фильтрации вашего фрейма данных.
...