2016-06-10 98 views
2

我有2個datapanels在大熊貓加載DF的:編輯日期顯示年在熊貓

DF1:

enter image description here

DF2:

enter image description here

他們倆具有相同的年份/國家/地區,但第一個年份以mm/dd/yy格式輸入,而第二個只有年份。我需要合併它們,這不應該太難,但我不知道如何重新格式化第一個日期,因此它指定年份而不是日期。 在此先感謝

回答

0

educ['Year'] = educ['Year'].year應該讓你的一年的數據幀,所提供的框架包含日期,如果沒有可以使用to_datetime函數進行轉換,如下所示:

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

它確實推斷日期,但追加.year產生一個錯誤: AttributeError:'系列'對象沒有屬性'年' –

+0

它實際上推斷它不​​正確,將1950-1965更改爲2050-2065 –

+0

這應該排序您 – hd1

1

它看起來像你需要在世紀明確(以避免它被解析爲20XX)拼接:

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 

無拼接:

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] 

與拼接:

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] 

注意:您可以嘗試在應用(這可能更有效)的解析。


您可以從與.DT訪問日期時間系列拔出年:

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

這也許可以達到你想要的代碼量最少的:

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

但請記住,將日期更改爲「年」也會將列dtype更改爲int

>>> df.dtypes 
Year  int64 
Country object 
dtype: object