#python-3.x #pandas #dataframe #lambda
#python-3.x #pandas #фрейм данных #лямбда
Вопрос:
У меня есть фрейм данных pandas со столбцом ‘Datetime’, содержащим информацию о времени, я хочу извлечь информацию о часах из столбца ‘Datetime’ и добавить ее в столбец часов фрейма данных.
Я в замешательстве, поскольку мой код работает, если я пишу лямбда-функцию без фигурных скобок
df['Datetime'].apply(lambda x: x.hour)
но, когда я пытаюсь использовать этот код вместо
df['Datetime'].apply(lambda x: x.hour**()**)
Я получаю сообщение об ошибке «TypeError: объект ‘int’ не вызывается».
С другой стороны, когда я использую функцию разделения с лямбда-выражением, она отлично работает с фигурными скобками —
df['Reasons'] = df['title'].apply(lambda x: x.split(':')[0])
Комментарии:
1. hour — это int, а не функция, split — это функция
2. Вы должны использовать
df['Datetime'].dt.hour
. Вам не нужно делатьlambda x:
для всего. Часто лучше просто использовать метод pandas без него. То же самое для разделения. Вы должны сделать:df['title'].str.split(':').str[0])
это фундаментально для написания хорошего кода с помощью pandas, поэтому вам будет очень полезно, если вы будете помнить об этих советах.
Ответ №1:
Как упоминалось @Dani Mesejo, hour является атрибутом объекта datetime . Следовательно, он отлично работает без скобок. Как только вы добавляете скобки, предполагается, что hour является функцией, и поэтому вы получаете эту ошибку.
Вы можете прочитать больше об объекте datetime в его документации