#python #pandas #dataframe #pandas-groupby #keyerror
Вопрос:
Кажется, я не могу напечатать следующую строку: summarydata["Name"].groupby(["Tag"]).size()
без получения ошибки:
File "C:Usersrspateluntitled0.py", line 76, in <module>
print(summarydata["Name"].groupby(["Tag"]).size())
File "C:UsersrspatelAnaconda3libsite-packagespandascoreseries.py", line 1720, in groupby
return SeriesGroupBy(
File "C:UsersrspatelAnaconda3libsite-packagespandascoregroupbygroupby.py", line 560, in __init__
grouper, exclusions, obj = get_grouper(
File "C:UsersrspatelAnaconda3libsite-packagespandascoregroupbygrouper.py", line 811, in get_grouper
raise KeyError(gpr)
KeyError: 'Tag'
Я проверил, что тег включен в качестве столбца в фрейм данных summarydata следующим образом:
if 'Tag' in summarydata.columns:
print("true")
else :
print("false")
что печатается как истина. Поэтому я не уверен, почему возникает ключевая ошибка, когда столбец находится во фрейме данных.
Ответ №1:
Вы пытаетесь сгруппироваться по ключу в самом столбце. Вместо этого вы хотите:
summarydata["name"].groupby(summarydata["Tag"])
из документов:
по: (отображение, функция, метка или список меток)
Используется для определения групп для groupby. Если by-это функция, она вызывается для каждого значения индекса объекта. Если передается диктант или Ряд, ЗНАЧЕНИЯ Ряда или диктанта будут использоваться для определения групп (значения ряда сначала выравниваются; см. Метод. align ()). Если передается ndarray, значения используются как есть для определения групп. Метка или список меток могут быть переданы в группу по столбцам в self. Обратите внимание, что кортеж интерпретируется как (единственный) ключ.
Другими словами, вы можете передать ему все, что угодно 😉 (Вот почему я не люблю панд…)
Вы можете передать его:
- a fn, который вызывается при каждом значении
- диктант(!) или серия, которые будут использоваться для группировки (того, что вы хотите)
- массив цифр (то же самое)
- метка или список меток, в этом случае они группируются по столбцу рассматриваемого объекта
Но в вашем случае вы уже выбрали name
столбец, поэтому Tag
столбец больше не существует! (Подумайте о том, что summarydata["name"]
возвращается.)
Поэтому, если вы хотите сгруппироваться подобным образом, вам нужно сначала сгруппироваться:
summarydata.groupby("Tag")["name"]