Конвертировать метку времени только в дату - PullRequest
0 голосов
/ 13 февраля 2019

Я просматривал все темы, которые я могу найти, и единственная, которая имеет отношение к этому типу проблемы форматирования, здесь, но это для Java ...

Как разобрать2013-03-13T20: 59: 31 + 0000 строка даты к дате

У меня есть столбец со значениями, такими как 201604 и 201605, которые мне нужно преобразовать в значения даты, такие как 2016-04-01и 2016-05-01.Для этого я сделал то, что ниже.

#Create Number to build full date
df['DAY_NBR'] = '01'

#Convert Max and Min date to string to do date transformation
df['MAXDT'] = df['MAXDT'].astype(str)
df['MINDT'] = df['MINDT'].astype(str)

#Add the day number to the max date month and year
df['MAXDT'] = df['MAXDT'] + df['DAY_NBR']

#Add the day number to the min date month and year
df['MINDT'] = df['MINDT'] + df['DAY_NBR']

#Convert Max and Min date to integer values
df['MAXDT'] = df['MAXDT'].astype(int)
df['MINDT'] = df['MINDT'].astype(int)

#Convert Max date to datetime
df['MAXDT'] = pd.to_datetime(df['MAXDT'], format='%Y%m%d')

#Convert Min date to datetime
df['MINDT'] = pd.to_datetime(df['MINDT'], format='%Y%m%d') 

Если честно, я могу работать с этим выводом, но он немного грязный, потому что уникальные значения для двух столбцов ...

MAXDT Values
['2016-07-01T00:00:00.000000000' '2017-09-01T00:00:00.000000000'
 '2018-06-01T00:00:00.000000000' '2017-07-01T00:00:00.000000000'
 '2017-03-01T00:00:00.000000000' '2018-12-01T00:00:00.000000000'
 '2017-12-01T00:00:00.000000000' '2019-01-01T00:00:00.000000000'
 '2018-09-01T00:00:00.000000000' '2018-10-01T00:00:00.000000000'
 '2016-04-01T00:00:00.000000000' '2018-03-01T00:00:00.000000000'
 '2017-05-01T00:00:00.000000000' '2018-08-01T00:00:00.000000000'
 '2017-02-01T00:00:00.000000000' '2016-12-01T00:00:00.000000000'
 '2018-01-01T00:00:00.000000000' '2018-02-01T00:00:00.000000000'
 '2017-06-01T00:00:00.000000000' '2018-11-01T00:00:00.000000000'
 '2018-05-01T00:00:00.000000000' '2019-11-01T00:00:00.000000000'
 '2016-06-01T00:00:00.000000000' '2017-10-01T00:00:00.000000000'
 '2016-08-01T00:00:00.000000000' '2018-04-01T00:00:00.000000000'
 '2016-03-01T00:00:00.000000000' '2016-10-01T00:00:00.000000000'
 '2016-11-01T00:00:00.000000000' '2019-12-01T00:00:00.000000000'
 '2016-09-01T00:00:00.000000000' '2017-08-01T00:00:00.000000000'
 '2016-05-01T00:00:00.000000000' '2017-01-01T00:00:00.000000000'
 '2017-11-01T00:00:00.000000000' '2018-07-01T00:00:00.000000000'
 '2017-04-01T00:00:00.000000000' '2016-01-01T00:00:00.000000000'
 '2016-02-01T00:00:00.000000000' '2019-02-01T00:00:00.000000000'
 '2019-07-01T00:00:00.000000000' '2019-10-01T00:00:00.000000000'
 '2019-09-01T00:00:00.000000000' '2019-03-01T00:00:00.000000000'
 '2019-05-01T00:00:00.000000000' '2019-04-01T00:00:00.000000000'
 '2019-08-01T00:00:00.000000000' '2019-06-01T00:00:00.000000000'
 '2020-02-01T00:00:00.000000000' '2020-01-01T00:00:00.000000000']
MINDT Values
['2016-04-01T00:00:00.000000000' '2017-07-01T00:00:00.000000000'
 '2016-02-01T00:00:00.000000000' '2017-01-01T00:00:00.000000000'
 '2017-02-01T00:00:00.000000000' '2018-12-01T00:00:00.000000000'
 '2017-08-01T00:00:00.000000000' '2018-04-01T00:00:00.000000000'
 '2017-10-01T00:00:00.000000000' '2019-01-01T00:00:00.000000000'
 '2018-05-01T00:00:00.000000000' '2018-09-01T00:00:00.000000000'
 '2018-10-01T00:00:00.000000000' '2016-01-01T00:00:00.000000000'
 '2016-03-01T00:00:00.000000000' '2017-11-01T00:00:00.000000000'
 '2017-05-01T00:00:00.000000000' '2018-07-01T00:00:00.000000000'
 '2018-06-01T00:00:00.000000000' '2017-12-01T00:00:00.000000000'
 '2016-10-01T00:00:00.000000000' '2018-02-01T00:00:00.000000000'
 '2017-06-01T00:00:00.000000000' '2018-08-01T00:00:00.000000000'
 '2018-03-01T00:00:00.000000000' '2018-11-01T00:00:00.000000000'
 '2016-08-01T00:00:00.000000000' '2016-06-01T00:00:00.000000000'
 '2018-01-01T00:00:00.000000000' '2016-07-01T00:00:00.000000000'
 '2016-11-01T00:00:00.000000000' '2016-09-01T00:00:00.000000000'
 '2017-04-01T00:00:00.000000000' '2016-05-01T00:00:00.000000000'
 '2017-09-01T00:00:00.000000000' '2016-12-01T00:00:00.000000000'
 '2017-03-01T00:00:00.000000000']

Я пытаюсьпостроить цикл, который проходит через эти даты, и это работает, но я не хочу иметь индекс со всеми этими нерелевантными нулями и буквой T в нем.Как я могу преобразовать эти пустые значения меток времени только в дату в формате гггг-мм-дд?

Спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

К сожалению, я считаю, что Pandas всегда хранит объекты даты и времени как datetime64[ns], то есть точность должна быть такой.Даже если вы попытаетесь сохранить как datetime64[D], он будет приведен к datetime64[ns].

Вместо этого можно просто сохранить эти объекты даты и времени как строки, но самое простое решение, скорее всего, просто лишит лишние нуликогда вы просматриваете их (т.е. используете df['MAXDT'].to_numpy().astype('datetime64[D]') и просматриваете отформатированный массив numpy), или просто переформатируете с использованием datetime.

...