Получите последний день года

#python #pandas #dataframe #date

Вопрос:

У меня есть df «панды» с колонкой «год». Я хочу получить последний день этого года. Например: 2020 —> 2020/12/31

Я пытался:

 data['Date']=datetime.date(year=data['Year'].astype(int), month=12, day=31)
 

но я получаю эту ошибку: «не удается преобразовать серию в <класс ‘int’> »

Что я делаю не так? Спасибо

PS Я понял, что могу просто сделать:

 data['Date']=data['Year'] "/12/31"
data['Date']=pd.to_datetime(data['Date'])
 

но мне все еще интересно, что было не так в моем предыдущем коде

Комментарии:

1. datetime.date не знает, как работать с фреймом данных. astype Метод на самом деле не возвращает an int , он возвращает весь столбец, элементами которого являются int s.

Ответ №1:

Datetime.date работает с отдельными записями по одной за раз. При использовании data['year'].astype(int) вы пытаетесь передать ряд в качестве аргумента, а не одно значение (как и ожидалось). Чтобы это сработало, это было бы что-то вроде

 data['Date']= data['Year'].apply(lambda x:datetime.date(year=x, month=12, day=31))
 

Но это несколько неэффективно, второй способ, который вы предложили, был бы быстрее.

Комментарии:

1. .map предназначен для использования в тех случаях, .apply когда вам, возможно, придется указать ось. Вы также забыли скобку в конце.