2017-08-16 57 views
-1

我有一個形狀的數據框(96,3)。有一列'日期',其值爲Q1-93,Q2-93,Q3-93,Q4-93等,直到2016年。我想從Q1-93提取1993-03-31的日期。並應用相同的對整列如何從日期爲四分之一格式的列中提取YYYY-MM-DD格式的日期

數據幀的列:

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) 
+4

你有什麼迄今所做?顯示代碼請輸入 –

回答

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 
+0

謝謝,這是工作:) –

相關問題