2015-07-23 19 views
5

È necessario aggiungere giorni lavorativi alle date elencate in una colonna esistente in un dataframe. I dati nella colonna sono nel tipo datetime64 [ns]. Utilizzando i suggerimenti da Business days in Python, ho provato il codice elencato di seguito.Aggiunta giorni lavorativi alla colonna datetime

import datetime 
from pandas.tseries.offsets import BDay 

df['Math Admin Date'] + BDay(1) 

ho ottenuto il seguente messaggio di errore:

TypeError: cannot use a non-absolute DateOffset in datetime/timedelta operations [<BusinessDay>] 

Come posso aggiungere giorni alla mia colonna datetime?

+0

Abbiamo bisogno di vedere da dove proviene 'df ['Math Admin Date']'. –

risposta

4

Purtroppo offset non supportare le operazioni che utilizza la matrice come gli oggetti in modo da avere a apply l'offset per ogni elemento:

In [208]: 
import datetime as dt 
from pandas.tseries.offsets import BDay 
​ 
df = pd.DataFrame({'Math Admin Date':pd.date_range(start=dt.datetime(2015,6,1), end = dt.datetime(2015,6,30))}) 
df['Math Admin Date'].apply(lambda x: x + BDay(1)) 

Out[208]: 
0 2015-06-02 
1 2015-06-03 
2 2015-06-04 
3 2015-06-05 
4 2015-06-08 
5 2015-06-08 
6 2015-06-08 
7 2015-06-09 
8 2015-06-10 
9 2015-06-11 
10 2015-06-12 
11 2015-06-15 
12 2015-06-15 
13 2015-06-15 
14 2015-06-16 
15 2015-06-17 
16 2015-06-18 
17 2015-06-19 
18 2015-06-22 
19 2015-06-22 
20 2015-06-22 
21 2015-06-23 
22 2015-06-24 
23 2015-06-25 
24 2015-06-26 
25 2015-06-29 
26 2015-06-29 
27 2015-06-29 
28 2015-06-30 
29 2015-07-01 
Name: Math Admin Date, dtype: datetime64[ns] 

Utilizzando un Timedelta avrebbe funzionato, ma questo non supporta giorni lavorativi in ​​questo momento:

df['Math Admin Date'] + pd.Timedelta(1,'D') 
+0

Grazie per il suggerimento! Funziona, ma sto progettando di aggiungere diversi numeri di giorni lavorativi a colonne diverse, e mi chiedo se sia possibile renderlo una funzione con più argomenti piuttosto che utilizzare continuamente una funzione anonima. Ad esempio def add_busdays (df.column, numero di giorni lavorativi da aggiungere). – BGreen

+0

Sì, funzionerebbe solo cambiando in 'def func (x, num_days = 1): x + BDay (num_days)' e quindi chiamiamolo sulla colonna: 'df ['column']. Apply (lambda x: func (x , some_num)) ' – EdChum

Problemi correlati