2016-06-10 16 views
2

I 2 Datapanel haben als df die in Pandas geladen:Schnitt Datum in Datenrahmen zeigen Jahr in Pandas

df1:

enter image description here

df2:

enter image description here

Beide von ihnen haben die gleichen Jahre/Länder, aber die erste hat die Jahreseinträge im Format MM/TT/JJ, während die zweite Jahresangabe hat. Ich muss sie zusammenführen, was nicht zu schwer sein sollte, aber ich weiß nicht, wie ich das Datum in der ersten umformatiere, also gibt es Jahre und keine Daten an. Vielen Dank im Voraus

Antwort

0

educ['Year'] = educ['Year'].year sollten Sie das Jahr in dem Datenrahmen erhalten, sofern der Rahmen ein Datum enthält, wenn du sie nicht mit der to_datetime Funktion umwandeln kann, wie folgt:

educ['Year'] = [y - 100 for y in pd.to_datetime(edu['Year'], infer_datetime_format=True).year] 
+0

Es leitet das Datum korrekt ab, aber das Anhängen von .year ergibt einen Fehler: AttributError: 'Series' Objekt hat kein Attribut 'Jahr' –

+0

Es leitet es tatsächlich falsch, Ändern 1950-1965 zu 2050-2065 –

+0

Das sollte sortieren Sie – hd1

1

Es sieht aus wie Sie müssen explizit im Jahrhundert von splice (um es als 20XX analysiert zu werden vermeiden):

In [11]: df = pd.DataFrame([["12/31/50", "Argentina"], ["12/31/51", "Argentina"], ["12/31/52", "Argentina"]], columns=["Year", "Country"]) 

In [12]: df 
Out[12]: 
     Year Country 
0 12/31/50 Argentina 
1 12/31/51 Argentina 
2 12/31/52 Argentina 

ohne Spleißen:

In [13]: pd.to_datetime(df["Year"]) 
Out[13]: 
0 2050-12-31 
1 2051-12-31 
2 2052-12-31 
Name: Year, dtype: datetime64[ns] 

In [14]: pd.to_datetime(df["Year"], format="%m/%d/%y") 
Out[14]: 
0 2050-12-31 
1 2051-12-31 
2 2052-12-31 
Name: Year, dtype: datetime64[ns] 

mit Spleißen:

In [15]: df["Year"].apply(lambda s: s[:-2] + "19" + s[-2:]) 
Out[15]: 
0 12/31/1950 
1 12/31/1951 
2 12/31/1952 
Name: Year, dtype: object 

In [16]: pd.to_datetime(df["Year"].apply(lambda s: s[:-2] + "19" + s[-2:]), format="%m/%d/%Y") 
Out[16]: 
0 1950-12-31 
1 1951-12-31 
2 1952-12-31 
Name: Year, dtype: datetime64[ns] 

Hinweis: Sie können die Analyse in der Anwendung versuchen (die kann effizienter sein).


Sie können das Jahr von einer Datetime-Serie mit dem .dt Accessor herausziehen:

In [21]: df["Year"] = pd.to_datetime(df["Year"].apply(lambda s: s[:-2] + "19" + s[-2:]), format="%m/%d/%Y") 

In [22]: df["Year"].dt.year 
Out[22]: 
0 1950 
1 1951 
2 1952 
Name: Year, dtype: int64 
1

Vielleicht kann dies erreichen, was Sie in den am wenigsten Menge an Code wünschen:

df['Year'] = pd.to_datetime(df['Year']).dt.year - 100 

Beachten Sie jedoch, dass das Ändern des Datums auf "Jahr" auch die Spalte dtype in int

ändert 10