Je veux soustraire les dates dans «A» des dates dans «B» et ajouter une nouvelle colonne avec la différence.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
J'ai essayé ce qui suit, mais j'obtiens une erreur lorsque j'essaie de l'inclure dans une boucle for ...
import datetime
date1=df['A'][0]
date2=df['B'][0]
mdate1 = datetime.datetime.strptime(date1, "%Y-%m-%d").date()
rdate1 = datetime.datetime.strptime(date2, "%Y-%m-%d").date()
delta = (mdate1 - rdate1).days
print delta
Que devrais-je faire?
python
pandas
date-difference
Jase Villam
la source
la source
pd.offsets.Day(1)
(avec un 's'). Je le nie aussi généralement, donc vous obtenez(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
pour des raisons que je ne comprends pas entièrement..isnull()
attribut et 2) elles ont un.day
attribut mais les données non manquantes ont un.days
attribut. Donc, après avoir créé la nouvelle variable, j'ai exécuté une boucle sur chaqueobs
réservation qui vérifie:if hasattr(obs,'days')
puis assignerobs.days
et sinon assignernp.nan
.Pour supprimer l'élément de texte 'days', vous pouvez également utiliser l'accesseur dt () pour les séries: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
Alors,
qui renvoie:
la source
df['C'] = (df['B'] - df['A']).dt.days
n'a pas fonctionné et j'ai dû utiliserdf['C'] = (df['B'] - df['A']).days
. Une idée pourquoi la mienne n'a pas donné le nombre de jours comme prévu?datetime64[ns]
pour être précis). Quand je l'ai faitdf['C'] = (df['B'] - df['A']).dt.days
, j'ai eu une erreur d'attribut qui disait AttributeError: l'objet 'Timedelta' n'a pas d'attribut 'dt' , j'ai donc essayé df ['C'] = (df ['B'] - df ['A']). jours qui m'ont donné la réponse souhaitée. (Bien sûr, j'utilise ma propre trame de données et non celle de l'exemple ci-dessus. Ou est-ce possible parce que j'ai aussi du temps dans ma date et non comme dans2018-09-24 10:17:18.800277
)Une compréhension de liste est votre meilleur pari pour le moyen le plus pythonique (et le plus rapide) de le faire:
Si vos colonnes ne sont pas au format datetime. La syntaxe la plus courte serait:
df.A = pd.to_datetime(df.A)
la source
Que dis-tu de ça:
la source