2016-04-04 7 views
0

Ich habe einige meiner Datum als 26-07-10 und andere als 4/8/2010 als String-Typ in einem CSV. Ich möchte, dass sie im Format 4.8.2010 sind, damit ich sie jedes Jahr analysieren und gruppieren kann. Gibt es eine Funktion in Python oder Pandas helfen mir?Wie konvertiert man Stech verschiedener Datumsformate in einzelne Datumsformate in Python?

+0

Da Sie Mischformat haben, müssen Sie sie anders analysieren, sind Ihre Daten nur in diesen 2 Formaten? Auch das zweite Formular ist ein ungültiges Formular, da es keine Null gefüllt – EdChum

+0

ja nur zwei Format hat. aber etwas wie allgemeine Antwort kann hilfreicher sein. –

+0

Hmm eigentlich scheint 'to_datetime' und' parse_dates' Parameter von 'read_csv' Mann/Frau genug, um beide Formen zu behandeln – EdChum

Antwort

0

Sie können dieses Datum Formen analysieren mit parse_dates param von read_csv Note jedoch für mehrdeutige Formen kann es zum Beispiel fehlschlagen, wenn Sie Monat geben mit Tag gemischt erste Formen zuerst:

In [7]: 
t="""date 
26-07-10 
4/8/2010""" 
df = pd.read_csv(io.StringIO(t), parse_dates=[0]) 
df 

Out[7]: 
     date 
0 2010-07-26 
1 2010-04-08 

Sie durch das angezeigte Format ändern können Ändern des String-Format dt.strftime mit:

In [10]: 
df['date'].dt.strftime('%d/%m/%Y') 

Out[10]: 
0 26/07/2010 
1 08/04/2010 
Name: date, dtype: object 

Wirklich obwohl es besser ist, zu halten, die Spalte als datetime Sie dann auf Jahr GROUPBY können:

In [11]: 
t="""date,val 
26-07-10,23 
4/8/2010,5567""" 
df = pd.read_csv(io.StringIO(t), parse_dates=[0]) 
df 

Out[11]: 
     date val 
0 2010-07-26 23 
1 2010-04-08 5567 

In [12]:  
df.groupby(df['date'].dt.year).mean() 

Out[12]: 
     val 
date  
2010 2795 
0

können Sie versuchen, mit parse-date Parameter von pd.read_csv() wie @EdChum erwähnt Alternativ können Sie sie in ein Standardformat typisieren könnte, wie das von datetime.date wie folgt:

import io 
import datetime 
t=u"""date 
26-07-10 
4/8/2010""" 
df = pd.read_csv(io.StringIO(t), parse_dates=[0]) 
df.date.astype(datetime.date) 
df 

aus:

date 
0 2010-07-26 
1 2010-04-08 
Verwandte Themen