将数据框转换为四分之一

时间:2018-11-19 14:20:05

标签: python

我有一个数据框(df)。 Date变量是一个字符串。我想将其转换为日期并重新格式化为该季度末的日期。下面是一个示例:

df:
         Date
0     201601
1     201602
2     201603
3     201604

201601是2016年第一季度,201604是2016年第四季度。期望的结果是:

df:
          Date
0     2016-03-31
1     2016-06-30
2     2016-09-30
3     2016-12-31

这是我尝试过的方法,但是不起作用。

df['date'] = pd.to_datetime(df.Date, format = '%Y%q')

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以定义一个函数来计算日期,然后应用该函数。

使用日历模块(https://docs.python.org/3.7/library/calendar.html#calendar.monthrange)中的monthrange函数,您的函数可能类似于:

from calendar import monthrange
from datetime import datetime   

def end_quarter(quarter):
    year = int(quarter[:4])
    month = int(quarter[-2:]) * 3
    day = monthrange(year, month)[1]
    return datetime(year, month, day).date()

,然后可以使用:

df["Date"] = df["Date"].apply(end_quarter)

答案 1 :(得分:0)

一种方法是继续将其视为字符串,并简单地执行if / else语句,即

res = []
for i in df['Date']:
    v1 = i[-2:]
    if v1 == '01':
        res.append(i[:4] + '-03-31')
    elif v1 == '02':
        res.append(i[:4] + '-06-30')
    elif v1 == '03':
        res.append(i[4:] + '-09-30')
    else:
        res.append(i[4:] + '-12-31')

#>>> res
#['2016-03-31', '2016-06-30', '03-09-30', '04-12-31']