У меня есть фреймворк этого формата -
var1 date
A 2017/01/01
A 2017/01/02
...
Я хочу, чтобы дата была преобразована в формат YYYY-MM, но df['date'].dtype - это object.
Как я могу удалить часть дня с даты, сохранив тип данных как datetime?
Ожидаемый результат -
A - 2017/01
Спасибо
How can I remove the day part from date while keeping the data type as datetime?. Это невозможно. Как и в реальной жизни, у каждого свидания есть день. Выберите то, что вы хотите: строку (с любыми компонентами, которые вам нравятся) или дату и время (со всеми компонентами, даже если они не все отображается).
@jpp, мы можем использовать dtype period как компромисс между dtypes datetime и object ...
@MaxU, Справедливая точка. Спасибо за повторное открытие с допустимым компромиссом :)






Возможна замена каждой даты первым днем месяца:
pd.to_datetime(d["date"], format = "%Y/%m/%d").apply(lambda x: x.replace(day=1))
Результат:
0 2017-01-01
1 2017-01-01
dtype - это объект. мне это нужно как datetime
Боюсь, это не отвечает на вопрос, что требует - компромисс. У объекта datetime нельзя "удалить" день.
У вас не может быть собственного представления для dtype datetime. Но у вас есть следующие варианты:
datetime, но установите для части day значение 1 (как @Kopytok), как уже было показано.period dtype, который по-прежнему позволяет использовать некоторую арифметику датыДемо:
In [207]: df
Out[207]:
var1 date
0 A 2018-12-31
1 A 2017-09-07
2 B 2016-02-29
In [208]: df['new'] = df['date'].dt.to_period('M')
In [209]: df
Out[209]:
var1 date new
0 A 2018-12-31 2018-12
1 A 2017-09-07 2017-09
2 B 2016-02-29 2016-02
In [210]: df.dtypes
Out[210]:
var1 object
date datetime64[ns]
new object
dtype: object
In [211]: df['new'] + 8
Out[211]:
0 2019-08
1 2018-05
2 2016-10
Name: new, dtype: object
вам нужно сначала проанализировать текущие даты - есть аргумент parse_dates, когда вы читаете файлы csv. Затем вы можете преобразовать в любой результат, который хотите. В качестве альтернативы просто используйте лямбда-функцию df.date.apply (lambda x: x [0: 4] + "/" + x [4: 5])