2016-07-14 1 views
1

Ich muss Daten verarbeiten, wo jemand einen Datumswert mit einem Jahr 1700 verwendet hat, wo es kein tatsächliches Ereignisdatum gibt. 1700 bricht Datetime, die um 1900 beginnt, aber ich bin sicher, dass ihr alle das wisst.Ändern Sie ein Jahr in Pandas Dataframe, wenn es niedriger als 1900 ist

Ich habe die Daten in Datetime konvertiert und dann versucht, eine if-Anweisung:

df["DATE"] = pd.to_datetime(df["DATE"])  
if df['DATE'].dt.year.any() < 1900 
    #assigning today's date 
    df['DATE'] = dt.datetime.today().strftime("%m/%d/%y") 
else: 
    #the original date value, formatted 
    df["DATE"] = df["DATE"].map(lambda x: x.strftime("%m/%d/%y")) 

Die if Anweisung nicht die 1700 und ich den Fehler verfängt:
"ValueError: year=1700 is before 1900"

Pandas Version: 0.18 .0 numpy Version: 1.11.1

+0

Beispieldaten würden die Antwort erleichtern. Jemand kann es trotzdem beantworten, aber wenn man es einbezieht, erhöht das fast immer die Wahrscheinlichkeit, eine Antwort zu bekommen. – piRSquared

Antwort

2

Ich habe Probleme beim Reproduzieren dieses Problems, aber Sie haben versucht:

df[df.DATE.dt.year < 1900] = dt.datetime.today() 
df.DATE = df.DATE.map(lambda x: x.strftime("%m/%d/%y")) 
+0

Das funktioniert, aber wie formatiere ich die Ausgabe? Hinzufügen von '.strftime ("% m /% d /% y ")' zu 'df [df.DATE.dt.year <1900] = dt.datetime.today()' gibt mir einen Typfehler – mattrweaver

+0

Die zweite Zeile ' df.DATE = df.Date.map (Lambda x: x.strftime ("% m /% d /% y") 'erledigt die Formatierung. Da Sie nur die Daten für Jahre <1900 ändern müssen, wird dies das tun zuerst und dann gehen Sie durch alle von ihnen und formatieren Sie es, wie Sie wollen – Grr

+0

Ok, das ist, was ich dachte, ich bekam immer noch diese Ausgabe: '2016-07-14 15: 44: 26.675000' in meiner endgültigen Datei, aber ich habe das später im Skript an etwas angeheftet. – mattrweaver