Ich möchte Daten in 'A' von Daten in 'B' subtrahieren und eine neue Spalte mit der Differenz hinzufügen.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
Ich habe Folgendes versucht, erhalte jedoch eine Fehlermeldung, wenn ich versuche, dies in eine for-Schleife aufzunehmen ...
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
Was soll ich machen?
python
pandas
date-difference
Jase Villam
quelle
quelle
pd.offsets.Day(1)
(mit einem 's'). Ich(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
Gründe, die ich nicht vollständig verstehe..isnull()
Attribut haben und 2) sie ein.day
Attribut haben, aber die nicht fehlenden Daten ein.days
Attribut haben. Nachdem ich die neue Variable erstellt hatte, führte ich eine Schleife über jedeobs
Ervation durch, die prüfte:if hasattr(obs,'days')
dann zuweisenobs.days
und sonst zuweisennp.nan
.Um das Textelement 'Tage' zu entfernen, können Sie auch den Accessor dt () für Serien verwenden: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
So,
was zurückgibt:
quelle
df['C'] = (df['B'] - df['A']).dt.days
hat nicht funktioniert und ich musste verwendendf['C'] = (df['B'] - df['A']).days
. Irgendeine Idee, warum meine nicht die erwartete Anzahl von Tagen angegeben hat?datetime64[ns]
genauer gesagt). Als ich das tatdf['C'] = (df['B'] - df['A']).dt.days
, bekam ich einen Attributfehler mit dem Attribut AttributeError: 'Timedelta'-Objekt hat kein Attribut' dt ' , also habe ich df [' C '] = (df [' B '] - df [' A ']) versucht . Tage, die mir die gewünschte Antwort gaben. (Natürlich verwende ich meinen eigenen Datenrahmen, nicht den im obigen Beispiel. Oder könnte es sein, dass ich auch Zeit in meinem Datum habe und nicht wie in2018-09-24 10:17:18.800277
)Ein Listenverständnis ist die beste Wahl für den pythonischsten (und schnellsten) Weg, dies zu tun:
Wenn Ihre Spalten nicht im Datum / Uhrzeit-Format vorliegen. Die kürzere Syntax wäre:
df.A = pd.to_datetime(df.A)
quelle
Wie wäre es damit:
quelle