2017-08-16 15 views
-1

データフレームの形状が96.3です。 Q1-93、Q2-93、Q3-93、Q4-93などの値を持つ 'Date'列があります.1993年3月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() 

もう1つの方法で年を取ろうとしましたそれはまた、関連する出力が得られませんでした:

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

あなたはこれまでに何をしましたか?コードplsを表示 –

答えて

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

ありがとう、これは動作しています:) –