2016-05-29 11 views
1

Ich benutze Jupyter Notebook, Pandas-Framework und Python als Programmiersprache. Ich habe einen Datenrahmen, der die folgende Form hat (10500, 4). Also hat es 4 Spalten und 10500 Datensätze. Initial_Date ist einer der 4 Spalten, der ein Object-Datentyp ist. Dies ist die Art von Informationen, die es enthält:Konvertiere den Inhalt des Objekt-Datentyps in den Datentyp Date in Python

Initial_Date 
1971 
11969 
102006 
03051992 
00131954 
27001973 
45061987 
1996 

Es ist einfach das Format der Spalte als DDMMYYYY zu entziffern (03.051.992 3. Mai ist 1992)

Hinweis: Wie Sie sehen, gibt es ungültig MM (00 und 13) und ungültig DD (00 und 45).

Ich möchte Regex verwenden, um zu extrahieren, was im Feld verfügbar ist. Ich weiß nicht, wie man YYYY separat zu MM oder DD liest, bitte erleuchte mich hier. Nach der Extraktion möchte ich testen, ob YYYY, DD und MM gültig sind. Wenn einer von ihnen nicht gültig ist, dann weisen Sie NaT sonst DD-MM-YYYY oder DD/MM/YYYY zu (nicht kritisch mit dem Endformat).

Zum Beispiel: 051.992 als ungültig, da dies wird DD/05/1992

Ein Feld betrachtet, die 8stellige zum Beispiel hat 10081996 10/08/1996

PS gültig betrachtet. Ich beginne mit Pandas, Jupyter Notizbuch und verlangsame meine Python Fähigkeiten wieder. FYI Wenn Sie denken, es gibt eine bessere Möglichkeit, jedes Feld in einen gültigen Date-Datentyp zu konvertieren, dann bitte erleuchten mich.

Antwort

1

Sie können es auf diese Weise tun:

result = pd.to_datetime(d.Initial_Date.astype(str), dayfirst=True, errors='coerce') 

result.ix[result.isnull()] = pd.to_datetime(d.Initial_Date.astype(str), format='%d%m%Y', dayfirst=True, errors='coerce') 
#format is set to %d%m%Y 

Ergebnis:

In [88]: result 
Out[88]: 
0 1971-01-01 
1   NaT 
2 2006-10-20 
3 1992-03-05 
4 1954-01-03 
5   NaT 
6   NaT 
7 1996-01-01 
Name: Initial_Date, dtype: datetime64[ns] 

original DF

In [89]: d 
Out[89]: 
    Initial_Date 
0   1971 
1   11969 
2  102006 
3  3051992 
4  131954 
5  27001973 
6  45061987 
7   1996 
+0

Dank viel MAXU! Entschuldigung für die verspätete Antwort. Dies funktionierte perfekt, außer ich musste das Format von% m% d% Y zu% d% m% Y – Timetraveller

+0

@Timetraveller ändern, immer froh zu helfen! Danke für die Annahme der Antwort! – MaxU