如何从具有季度年格式日期的列中提取YYYY-MM-DD格式的日期

时间:2017-08-16 15:27:21

标签: python-3.x pandas

我有一个形状的数据框(96,3)。有一个列'日期',其值为Q1-93,Q2-93,Q3-93,Q4-93等,直到2016年。我想从Q1-93提取日期为1993-03-31。并应用相同的在整个栏目

包含列的数据框:

enter image description here

请在下面找到我尝试过的代码: 我已经用这种方式尝试了一年,不能多年迭代

df['Quarter'], df['Year'] = zip(*df['Date'].apply(lambda x: (x[:2], x[3:])))
y=1993
for n in range (0,4):
    if df['Quarter'].loc[n]=='Q1':
        df['Date'].iloc[n]='{}-03-31'.format(y)
    elif df['Quarter'].loc[n]=='Q2':
        df['Date'].iloc[n]='{}-06-30'.format(y)
    elif df['Quarter'].iloc[n]=='Q3':
        df['Date'].iloc[n]='{}-09-30'.format(y)
    else:
        df['Date'].iloc[n]='{}-12-31'.format(y)

df.head()

尝试过一年多的方法,但也没有提供相关的输出:

from dateutil.rrule import rrule, MONTHLY
from datetime import datetime

a = datetime(1993, 3, 31)

for dt in rrule(freq=MONTHLY, dtstart=a, count=96, interval=3):
print (dt)

1 个答案:

答案 0 :(得分:1)

我这样做:

In [193]: df
Out[193]:
    Date
0  Q1-93
1  Q2-93
2  Q3-93
3  Q4-93
4  Q1-01
5  Q1-10
6  Q2-16

In [194]: def f(s):
     ...:     t = s.str.extract(r'(Q\d+)-(\d+)', expand=True)
     ...:     t[1] = pd.to_numeric(t[1], errors='coerce')
     ...:     t[1] += np.where(t[1] < 35, 2000, 1900)
     ...:     return pd.PeriodIndex(t[1].astype(str)+t[0], freq='Q') \
     ...:              .astype(np.datetime64) + \
     ...:            pd.offsets.QuarterEnd()
     ...:

In [195]: df['new'] = f(df['Date'])

In [196]: df
Out[196]:
    Date        new
0  Q1-93 1993-03-31
1  Q2-93 1993-06-30
2  Q3-93 1993-09-30
3  Q4-93 1993-12-31
4  Q1-01 2001-03-31
5  Q1-10 2010-03-31
6  Q2-16 2016-06-30