#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
Метод на самом деле не возвращает anint
, он возвращает весь столбец, элементами которого являются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
когда вам, возможно, придется указать ось. Вы также забыли скобку в конце.