Ошибка лямбда-функции Python при использовании со скобками

#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 в его документации