Преобразование строки, которая имеет день года в datetime - PullRequest
0 голосов
/ 13 июня 2019

У меня есть строковый столбец, который выглядит следующим образом:

2018-24 7:10:0      
2018-8 12:1:20      
2018-44 13:55:19    

24,8,44, которые вы видите, - это день года, а не дата.
Как я могу преобразовать этов столбец даты и времени в следующем формате?

2018-01-24 07:10:00
2018-01-08 12:01:20
2018-02-13 13:55:19

Я не могу найти что-либо, связанное с конвертацией дня года?

Ответы [ 3 ]

2 голосов
/ 13 июня 2019

Вам нужна строка формата '%Y-%j %H:%M:%S'

In[53]:
import datetime as dt
dt.datetime.strptime('2018-44 13:55:19', '%Y-%j %H:%M:%S')

Out[53]: datetime.datetime(2018, 2, 13, 13, 55, 19)

%j это день года

Для pandas:

In[59]:
import pandas as pd
import io
t="""2018-24 7:10:0
2018-8 12:1:20
2018-44 13:55:19"""
df = pd.read_csv(io.StringIO(t), header=None, names=['datetime'])
df

Out[59]: 
           datetime
0    2018-24 7:10:0
1    2018-8 12:1:20
2  2018-44 13:55:19

Используйте pd.to_datetime и передайте format параметр:

In[60]:
df['new_datetime'] = pd.to_datetime(df['datetime'], format='%Y-%j %H:%M:%S')
df

Out[60]: 
           datetime        new_datetime
0    2018-24 7:10:0 2018-01-24 07:10:00
1    2018-8 12:1:20 2018-01-08 12:01:20
2  2018-44 13:55:19 2018-02-13 13:55:19
1 голос
/ 13 июня 2019

Вы можете использовать dateutil.relativedelta для суммирования дня первого дня года.

пример:

from datetime import datetime
from dateutil.relativedelta import relativedelta

datetime.now()+ relativedelta(days=5)
0 голосов
/ 13 июня 2019

Документация на strftime.org определяет спецификатор формата %j как день обработки года.Я не знаю, доступен ли он на всех платформах, но у моего Mac он точно есть.

Используйте time.strptime для преобразования строки в дату и время.В выводе ниже добавлена ​​новая строка для удобства чтения:

>>> time.strptime('2018-24 7:10:0', '%Y-%j %H:%M:%S')
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=24, tm_hour=7,
       tm_min=10, tm_sec=0, tm_wday=2, tm_yday=24, tm_isdst=-1)

time.strftime форматирует дату и время, поэтому вы можете получить то, что вам нужно, применив его к выводу strptime:

>>> time.strftime('%Y-%m-%d %H:%M:%S',
...               time.strptime('2018-24 7:10:0', '%Y-%j %H:%M:%S'))
'2018-01-24 07:10:00'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...