Вопрос или проблема
Я пытаюсь сгруппировать годы по десятилетиям, чтобы сделать визуализацию более ясной, и моя функция, похоже, работает изначально:
def banding(year):
if year <= 1989:
print ('1980-е')
elif year <= 1999:
print ('1990-е')
elif year <= 2009:
print ('2000-е')
elif year <= 2019:
print ('2010-е')
else:
print ('2020-е')
df_clean['decade'] = df_clean['year'].apply(banding)
Однако, когда я проверяю это по сравнению с DataFrame (df_clean.head()
), в столбце вместо 1980-х, 1990-х и т. д. заполнены ‘none’ в каждой строке.
Что я сделал не так?
Я пробовал tolist
и to_frame
, которые раньше использовал, но ни один из них не сработал (или я неправильно пишу код)
Ответ или решение
Ваша проблема заключается в том, что функция banding
ничего не возвращает, а только печатает значения в консоль. Когда вы используете метод apply
для применения функции, Pandas ожидает, что функция вернет значение, которое должно быть присвоено в новой колонке. Поскольку ваша функция в текущем виде использует print
, возвращаемое значение по умолчанию будет None
, и именно поэтому в новом столбце decade
вы видите значения None
.
Для решения проблемы вам нужно изменить вашу функцию так, чтобы она возвращала строку, а не печатала ее. Вот исправленный код:
def banding(year):
if year <= 1989:
return '1980s'
elif year <= 1999:
return '1990s'
elif year <= 2009:
return '2000s'
elif year <= 2019:
return '2010s'
else:
return '2020s'
df_clean['decade'] = df_clean['year'].apply(banding)
Теперь, когда вы применяете эту функцию к вашему DataFrame с помощью apply
, возвращаемые значения будут присвоены новой колонке decade
, и вы сможете видеть ‘1980s’, ‘1990s’ и так далее в соответствующих строках.
После внесения этих изменений, проверьте ваш DataFrame с помощью df_clean.head()
, и вы должны увидеть корректные значения в столбце decade
.
Если у вас есть дополнительные вопросы или вам нужна дальнейшая помощь, не стесняйтесь спрашивать!