Как получить часы-минуты-секунды из формата даты и времени ISO 8601? - PullRequest
0 голосов
/ 04 января 2019

Я работаю с файлом Excel в Pandas, где я пытаюсь разобраться со столбцом «Дата», где Дата указана в формате ISO 8601.Я хочу взять этот столбец и сохранить дату и время в двух разных столбцах. Значения в этих двух столбцах должны быть сохранены в восточном переходе на летнее время.Вот как они должны выглядеть

Date                    Date (New)  Time (New)
1999-01-01T00:00:29.75  12/31/1998  6:59:58 PM
1999-01-01T00:00:30.00  12/31/1998  6:59:59 PM
1999-01-01T00:00:32.25  12/31/1998  7:00:00 PM
1999-01-01T00:00:30.50  12/31/1998  6:59:58 PM

Я добился этого частично.Я преобразовал значения в восточное летнее время и успешно сохранил значение даты правильно.Однако я хочу, чтобы значение времени было сохранено в 12-часовом формате, а не в 24-часовом формате, как сейчас?

Так выглядит мой вывод.

Date                  Date (New)    Time (New)
1999-01-01T00:00:29.75  1998-12-31  19:00:30
1999-01-01T00:00:30.00  1998-12-31  19:00:30
1999-01-01T00:00:32.25  1998-12-31  19:00:32
1999-01-01T00:00:30.50  1998-12-31  19:00:31

Кто-нибудь знает, что я могу для этого сделать?

from pytz import timezone

import dateutil.parser

from pytz import UTC

import datetime as dt

df3['Day']=pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:    %S.%f',errors='coerce').dt.tz_localize('UTC')

df3['Day']= df3['Day'].dt.tz_convert('US/Eastern')
df3['Date(New)'], df3['Time(New)'] = zip(*[(d.date(), d.time()) for d in  df3['Day']])

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Вы должны использовать d.time().strftime("%I:%M:%S %p"), который будет форматировать дату согласно запросу.

strftime () и strptime () Поведение

0 голосов
/ 04 января 2019

Вы можете установить формат времени, используемый для вывода - само значение времени (и должно быть) сохранено как datetime.time() - если вы хотите конкретное строковое представление, вы можете создать столбец строкового типа в нужном формате:

from pytz import timezone 
import pandas as pd
import datetime as dt

df= pd.DataFrame([{"Date":dt.datetime.now()}]) 

df['Day']=pd.to_datetime( df['Date'], format='%Y-%m-%d %H:%M:    %S.%f',
                          errors='coerce').dt.tz_localize('UTC')

df['Day']= df['Day'].dt.tz_convert('US/Eastern')
df['Date(New)'], df['Time(New)'] = zip(*[(d.date(), d.time()) for d in  df['Day']]) 

# create strings with specific formatting
df['Date(asstring)'] = df['Day'].dt.strftime("%Y-%m-%d")
df['Time(asstring)'] = df["Day"].dt.strftime("%I:%M:%S %p") 

# show resulting column / cell types
print(df.dtypes)
print(df.applymap(type))
# show df
print(df)

Вывод:

# df.dtypes
Date                          datetime64[ns]
Day               datetime64[ns, US/Eastern]
Date(New)                             object
Time(New)                             object
Date(asstring)                        object
Time(asstring)                        object

# from df.applymap(type)
Date            <class 'pandas._libs.tslib.Timestamp'>
Day             <class 'pandas._libs.tslib.Timestamp'>  
Date(New)       <class 'datetime.date'>
Time(New)       <class 'datetime.time'>
Date(asstring)  <class 'str'>
Time(asstring)  <class 'str'>

# from print(df)
                        Date                              Day   Date(New)        Time(New) 
0 2019-01-04 00:40:02.802606 2019-01-03 19:40:02.802606-05:00  2019-01-03  19:40:02.802606 

Date(asstring) Time(asstring)
    2019-01-03    07:40:02 PM
0 голосов
/ 04 января 2019

Похоже, вы очень близки.% H - 24-часовой формат.Вместо этого следует использовать% I.

Как я могу учесть период (AM / PM) с datetime.strptime?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...