Как обнулить временную составлющую значения колонки с датой?

Имеется колонка с датами формата: 2006-07-21 11:41:06.179131, которые нужно привести к следующему формату: 2006-07-21 00:00:00.000000

Пробовал сделать так:

df['date'] = df['date'].apply(lambda x:x.replace(hour=0,minute=0,second=0,microsecond=1))

Возвращается дата в таком формате: 2006-07-21 00:00:00.000001, если microsecond=0, тогда вообще пропадает весь хвост после 2006-07-21.


Ответы (1 шт):

Автор решения: MaxU

"Хвост" не пропадает - просто Pandas не показывает компонент времени если у всех дат в столбце время нулевое (00:00:00.000000).

Пример:

In [45]: df = pd.DataFrame({"DT":["2006-07-21 11:41:06.179131", "2006-07-21 12:00:00.123456"], "VAL":[11,12]})

In [46]: df["DT"] = pd.to_datetime(df["DT"])

In [47]: df
Out[47]:
                          DT  VAL
0 2006-07-21 11:41:06.179131   11
1 2006-07-21 12:00:00.123456   12

In [48]: df.dtypes
Out[48]:
DT     datetime64[ns]
VAL             int64
dtype: object

In [49]: df["DT"] = df["DT"].dt.floor("D")

In [50]: df
Out[50]:
          DT  VAL
0 2006-07-21   11
1 2006-07-21   12

In [51]: df.to_dict()
Out[51]:
{'DT': {0: Timestamp('2006-07-21 00:00:00'),
  1: Timestamp('2006-07-21 00:00:00')},
 'VAL': {0: 11, 1: 12}}

In [52]: df.dtypes
Out[52]:
DT     datetime64[ns]
VAL             int64
dtype: object

а теперь прибавим  одну миллисекунду в последней строке:

In [54]: df.loc[1, "DT"] += pd.offsets.Milli(1)

In [55]: df
Out[55]:
                       DT  VAL
0 2006-07-21 00:00:00.000   11
1 2006-07-21 00:00:00.001   12
→ Ссылка