2017-06-02 136 views
1

我有一列日期大熊貓據幀行大熊貓基礎上添加日期

2015-11-01 2015-12-01 2016-01-01 2016-03-01 2016-03-01 2016-10-01 2016-10-01 2016-12-01 2017-03-01

我要插入兩行, 1.由前一個月第一行的行開頭 2.一行結束了最後一排的下個月

得到所需的輸出, 2015-10-01 2015-11-01 2015-12-01 2016-01-01 2016-03-01 2016-03-01 2016-10-01 2016-10-01 2016-12-01 2017-03-01 2017-04-01

是什麼做的Python的方式這是什麼?

回答

1

用途:

df['date']=pd.to_datetime(df['date']) 

a = df.loc[1, 'date'] - pd.offsets.MonthBegin() 
b = df.loc[len(df.index) - 1, 'date'] + pd.offsets.MonthBegin() 
df = pd.DataFrame([a] + df['date'].tolist() + [b], columns=['date']) 
print (df) 
     date 
0 2015-11-01 
1 2015-11-01 
2 2015-12-01 
3 2016-01-01 
4 2016-03-01 
5 2016-03-01 
6 2016-10-01 
7 2016-10-01 
8 2016-12-01 
9 2017-03-01 
10 2017-04-01 

或者:

df.index = df.index + 1 
df.loc[0, 'date'] = df.loc[1, 'date'] - pd.offsets.MonthBegin() 
df.loc[len(df.index), 'date'] = df.loc[len(df.index) - 1, 'date'] + pd.offsets.MonthBegin() 
df = df.sort_index() 
print (df) 
     date 
0 2015-10-01 
1 2015-11-01 
2 2015-12-01 
3 2016-01-01 
4 2016-03-01 
5 2016-03-01 
6 2016-10-01 
7 2016-10-01 
8 2016-12-01 
9 2017-03-01 
10 2017-04-01 
2

嘗試用MonthBegin

import pandas as pd 
df=pd.DataFrame(['2015-11-01','2015-12-01','2016-01-01','2016-03-01','2016-03-01','2016-10-01','2016-10-01','2016-12-01','2017-03-01'],columns=['date']) 
df['date']=pd.to_datetime(df['date']) 
df=pd.DataFrame([df.loc[0,'date'] - pd.offsets.MonthBegin(1)]+list(df['date'])+[df.loc[len(df)-1,'date'] + pd.offsets.MonthBegin(1)],columns=['date']) 
df 

輸出:

date 
0 2015-10-01 
1 2015-11-01 
2 2015-12-01 
3 2016-01-01 
4 2016-03-01 
5 2016-03-01 
6 2016-10-01 
7 2016-10-01 
8 2016-12-01 
9 2017-03-01 
10 2017-04-01 
+0

@jezrael謝謝請注意。 –