Python 3.x 如何从日期为季度年格式的列中提取YYYY-MM-DD格式的日期

Python 3.x 如何从日期为季度年格式的列中提取YYYY-MM-DD格式的日期,python-3.x,pandas,Python 3.x,Pandas,我有一个形状为(96,3)的数据框。有一列“日期”,其值为截至2016年的Q1-93、Q2-93、Q3-93、Q4-93等。我想从Q1-93中提取日期为1993-03-31,并将其应用于整个列 带列的数据帧: 请在下面找到我尝试的代码: 我这样做已经一年了,不能重复多年 df['Quarter'], df['Year'] = zip(*df['Date'].apply(lambda x: (x[:2], x[3:]))) y=1993 for n in range (0,4): if

我有一个形状为(96,3)的数据框。有一列“日期”,其值为截至2016年的Q1-93、Q2-93、Q3-93、Q4-93等。我想从Q1-93中提取日期为1993-03-31,并将其应用于整个列

带列的数据帧:

请在下面找到我尝试的代码: 我这样做已经一年了,不能重复多年

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)
我会这样做:

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
[193]中的
:df
Out[193]:
日期
0 Q1-93
1 Q2-93
2第3-93季度
3第4-93季度
4 Q1-01
5第一季度至第十季度
6 Q2-16
在[194]中:定义f(s):
…:t=s.str.extract(r'(Q\d+)-(\d+),expand=True)
…:t[1]=pd.to_numeric(t[1],errors='concurve')
其中(t[1]<3520001900)
…:返回pd.PeriodIndex(t[1].astype(str)+t[0],freq='Q')\
…:.astype(np.datetime64)+\
…:pd.offsets.QuarterEnd()
...:
在[195]中:df['new']=f(df['Date']
In[196]:df
出[196]:
新日期
0一九九三年第一季一九九三年三月三十一日
1 Q2-93 1993-06-30
2一九九三年第三季一九九三年九月三十日
3一九九三年第四季一九九三年十二月三十一日
4 Q1-01 2001-03-31
5 Q1-10 2010-03-31
6 2016年第二季度16-06-30

到目前为止您做了什么?显示代码