J'ai eu un fichier de données comme ci-dessous:
def tenure(df):
if df['terminationdate'] != np.nan:
tenure = (df['terminationdate'] - df['startdate'])/np.timedelta64(1, 'M')
else:
tenure = (datetime.datetime.now() - df['startdate'])/np.timedelta64(1, 'M')
return tenure
3 Réponses :
Essayez de convertir des colonnes en date à l'aide de PD.TO_DateTime ()
Remplir la date actuelle à l'aide de NP.where and DateTime.DateTime.now (). Date
Final Appliquer votre formule de différence
df ['TerminationDate'] = np.where (DF ["TerminationDate ']. ISnull (), DateTime.DateTime.now (). Date (), DF [" TerminationDate']) CODE> est un Verbose Way d'écrire DF ['TerminationDate']. Fillna (DateTime.DateTime.NOW (). Date (), emplois (), emplacement = true) code>. Egalement datetime.datetime.now (). Date () Code> est une solution verbose d'écrire datetime.date.today () code>. Mais pourquoi même la résiliation mutée? Il suffit de faire df ["résultat '] = (DF [" TerminationDate']. Fillna (DateTime.Date.Today ()) - DF ['startdate']) / np.timédielta64 (1, 'm') < / code>
@Stevenrumbalski Vous avez raison votre solution est la plus précise
La réponse de Tawab_shakeel est valide. Si vous souhaitez conserver la nulle dans l'ensemble de données et suivez votre logique, vous pouvez utiliser la fonction Appliquer sur chaque brut
from datetime import datetime
import pandas as pd
import numpy as np
df = pd.DataFrame({'startdate': pd.to_datetime(['1997-07-13', '1999-07-26', '2003-04-01', '2007-06-01', '2009-06-01']),
'terminationdate': pd.to_datetime(['2004-09-29', '2016-03-23', None, None, None])})
def tenure(start_date, end_date):
if pd.isna(end_date) == False:
tenure = (end_date - start_date)/np.timedelta64(1, 'M')
else:
tenure = (datetime.now() - start_date)/np.timedelta64(1, 'M')
return tenure
tenure_month = df.apply(lambda row: tenure(row['startdate'], row['terminationdate']), axis = 1)
Vous pouvez simplement utiliser FILLNA code> pour remplacer le NAT code> dans TerminationDate code> avec en vigueur: tenure = (df['terminationdate'].fillna(datetime.datetime.today()) - df['startdate'])/
np.timedelta64(1, 'M')
Agréable. Vous pouvez préférer denttime.date.today () code> sur denttime.datetime.today () code> pour obtenir la même précision que les autres dates.
Vous voulez
FILLNA code>:df.terminationdate.fillna (date_here, emplacement = true) code> avant la soustraction.Est-ce nul ou Nat? Ils ne sont pas la même chose.
Oh, c'est Nat en fait. Merci de rappel.
Probablement ne veulent probablement pas
surplace = true code> comme cela mettrait fin à l'employé.