2017-05-14 5 views
0

J'ai une colonne "DateBecameRep_Year" qui contient uniquement des valeurs d'année (c'est-à-dire 1974, 1999, etc.). Je veux créer une nouvelle colonne dans ma base de données qui calcule la différence entre l'année en cours et l'année dans le champ "DateBecameRep_Year".Python: Comment calculer la différence btw Année et année en cours à partir de la colonne?

est sous le code que j'ai essayé d'utiliser:

df_DD['DateBecameRep_Year'] = pd.to_datetime(df_DD['DateBecameRep_Year']) 

df_DD['Current Year'] = datetime.now().year 
df_DD['Current Year'] = pd.to_datetime(df_DD['Current Year']) 

df_DD['Years_Since_BecameRep'] = df_DD['Current Year'] - df_DD['DateBecameRep_Year'] 
df_DD['Years_Since_BecameRep'] = df_DD['Years_Since_BecameRep']/np.timedelta64(1, 'Y') 

df_DD['Years_Since_BecameRep'].head() 

Ceci est la sortie que je reçois qui semble très étrange:

enter image description here

Mon hypothèse est que cela a quelque chose à voir avec les éléments suivants:

enter image description here

Toute aide est grandement appréciée!

+0

pouvez-vous étendre votre question avec un petit ensemble de données reproductibles (dans le texte/format CSV) et désiré ensemble de données? Actuellement, il est maintenant clair ce que vous essayez d'atteindre ... Pourquoi voudriez-vous convertir l'année (entier) en 'datetime' dtype? – MaxU

+0

Je suppose que vous avez juste besoin d'une différence entre les années? Si c'est le cas, retirez la troisième ligne du code. –

+0

Remplacez tout ce que vous code par 'df_DD ['Years_Since_BecameRep'] = datetime.now(). Year - df_DD ['DateBecameRep_Year']' et c'est tout, non? –

Répondre

0

Si vous voulez juste obtenir le numéro de l'année différente, vous pouvez simplement utiliser la soustraction, pas besoin de convertir en datetime.

import pandas as pd 
import datetime 
current_year = datetime.datetime.now().year #get current year 
df_DD = pd.DataFrame.from_dict({"DateBecameRep_Year":[1999,2000,2015,1898,1788,1854]}) 
df_DD['Current Year'] = datetime.datetime.now().year 
df_DD["Years_Since_BecameRep"] = df_DD['Current Year'] - df_DD['DateBecameRep_Year'] # substract to get the year delta 

df_DD sera:

DateBecameRep_Year Current Year Years_Since_BecameRep 
0 1999    2017   18 
1 2000    2017   17 
2 2015    2017   2 
3 1898    2017   119 
4 1788    2017   229 
5 1854    2017   163