2015-12-29 117 views
1

我在熊貓中有一個數據框,其中包含事件發生以來的天數。我想創建一個新的列,通過從當前日期中減去天數來計算事件的日期。每次我嘗試應用pd.offsets.Daypd.Timedelta時,都會收到一個錯誤消息,指出Series是不受支持的類型。這也發生在我使用apply時。當我使用map時,我收到一個運行時錯誤,指出「調用Python對象時超出最大遞歸深度」。在熊貓中將整數系列轉換爲timedelta

例如,假設我的數據幀是這樣的:

index days_since_event 
0  5 
1  7 
2  3 
3  6 
4  0 

我想創建一個事件的日期的新列,所以我期望的結果(使用2015年12月29日今天的日期)

index days_since_event event_date 
0  5     2015-12-24 
1  7     2015-12-22 
2  3     2015-12-26 
3  6     2015-12-23 
4  0     2015-12-29 

我嘗試過多種方式來做到這一點,但每個都收到錯誤。

一種方法我試過是:

now = pd.datetime.date(pd.datetime.now()) 
df['event_date'] = now - df.days_since_event.apply(pd.offsets.Day) 

有了這個,我收到一個錯誤,指出系列是不支持的類型。

我嘗試了上面.map代替.apply,和接收到的誤差「最大遞歸深度而調用Python對象超出」。

我也試圖在天轉換成timedelta,如:

df.days_since_event = (dt.timedelta(days = df.days_since_event)).apply 

這也收到一個錯誤引用該系列是不支持的類型。

+4

郵政編碼,問題可能是任何事情 – Untitled123

回答

3

首先,與整數列轉換爲timedelta,你可以使用to_timedelta

In [60]: pd.to_timedelta(df['days_since_event'], unit='D') 
Out[60]: 
0 5 days 
1 7 days 
2 3 days 
3 6 days 
4 0 days 
Name: days_since_event, dtype: timedelta64[ns] 

然後你就可以創建一個與當前日期的新列和。減去那些timedelta的:

In [62]: df['event_date'] = pd.Timestamp('2015-12-29') 

In [63]: df['event_date'] = df['event_date'] - pd.to_timedelta(df['days_since_event'], unit='D') 

In [64]: df['event_date'] 
Out[64]: 
0 2015-12-24 
1 2015-12-22 
2 2015-12-26 
3 2015-12-23 
4 2015-12-29 
dtype: datetime64[ns]