Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:strftime()函数可以处理季度日期转换吗?_Python_Date_Datetime_Strptime - Fatal编程技术网

Python:strftime()函数可以处理季度日期转换吗?

Python:strftime()函数可以处理季度日期转换吗?,python,date,datetime,strptime,Python,Date,Datetime,Strptime,我需要在Python中处理大量的日期格式转换。输入日期格式可能类似于字符串类型中的“2018/07/07”。使用datetime。()函数将其转换为'2018-07-07T00:00:00'。然而,一些特殊的日期格式可能会让我很担心,比如“2018Q1”,这意味着2018年第一季度 我发现strftime函数中没有任何东西可以用来描述季度。 我试过: 我真正想要的是'2018-03-01T00:00:00'或'2018-03-31T00:00:00'让我知道,好了,现在是季度日期 进一步关注:

我需要在Python中处理大量的日期格式转换。输入日期格式可能类似于字符串类型中的
“2018/07/07”
。使用datetime。()函数将其转换为
'2018-07-07T00:00:00'
。然而,一些特殊的日期格式可能会让我很担心,比如
“2018Q1”
,这意味着2018年第一季度

我发现strftime函数中没有任何东西可以用来描述季度。 我试过:

我真正想要的是
'2018-03-01T00:00:00'
'2018-03-31T00:00:00'
让我知道,好了,现在是季度日期

进一步关注:
由于某些日期格式可能类似于
'18/07'
,因此使用该功能只能显示月份的第一天
'2018-07-01T00:00:00'
,而不能显示月份的最后一天。如果从输入日期算起没有“天”,我想对月的最后一天的数据进行标准化。

回答问题:不,据我所知不是。提供另一种选择:您可以使用
pandas.To_datetime
自动解析季度,例如

import pandas as pd
print(pd.to_datetime("2018Q1").isoformat())
# 2018-01-01T00:00:00
…或编写自己的解析器,例如

from datetime import datetime

def year_quarter_to_ymd(s):
    parts = s.upper().split('Q')
    dt = datetime(int(parts[0]), int(parts[1])*3-2, 1)
    return dt.isoformat()

tstrings = ["2018Q1","2018Q2","2018Q3","2018Q4"]

for t in tstrings:
    print(year_quarter_to_ymd(t))
    
# 2018-01-01T00:00:00
# 2018-04-01T00:00:00
# 2018-07-01T00:00:00
# 2018-10-01T00:00:00  
虽然不太方便,但自定义功能在我的机器上运行得更快:

%timeit pd.to_datetime("2018Q1").isoformat()
69.1 µs ± 289 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit year_quarter_to_ymd("2018Q1")
1.32 µs ± 3.01 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

那真有效!非常感谢@MrFuppes,根据他的回答,我尝试使用
calendar
功能自动查找最后一天。它也有用!在此处更新结果:

from datetime import datetime
import calendar

def year_quarter_to_ymd(s):
    parts = s.upper().split('Q')
    end = calendar.monthrange(int(parts[0]), int(parts[1])*3)[1]
    dt = datetime(int(parts[0]), int(parts[1])*3, end)
    return dt.isoformat()

print(year_quarter_to_ymd("2019Q1"))

#2019-03-31T00:00:00

我会看一看。它似乎支持带有
%q
@HernánAlarcón的四分之一。这是一个很好的建议,但是,输入实际上来自一个嵌套的json文件,一旦我规范化了所有日期,我需要将结果返回到json。我担心如果它太复杂和耗时,首先转换为pd,然后找出它并进行处理,最后返回dict格式。非常感谢!真的很感激!
from datetime import datetime
import calendar

def year_quarter_to_ymd(s):
    parts = s.upper().split('Q')
    end = calendar.monthrange(int(parts[0]), int(parts[1])*3)[1]
    dt = datetime(int(parts[0]), int(parts[1])*3, end)
    return dt.isoformat()

print(year_quarter_to_ymd("2019Q1"))

#2019-03-31T00:00:00