簡體   English   中英

將具有一年中某天的字符串轉換為日期時間

[英]Converting a string that has day of the year to datetime

我有一個字符串列,如下所示:

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

您看到的24、8、44是一年中的一天,而不是日期。
如何將其轉換為以下格式的datetime列?

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

我找不到與一年中的轉換日期相關的任何信息?

您需要格式字符串'%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

您可以使用dateutil.relativedelta作為年份的第一天的總和。

例:

from datetime import datetime
from dateutil.relativedelta import relativedelta

datetime.now()+ relativedelta(days=5)

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的輸出來獲得所需的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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM