我有2個datapanels在大熊貓加載DF的:編輯日期顯示年在熊貓
DF1:
DF2:
他們倆具有相同的年份/國家/地區,但第一個年份以mm/dd/yy格式輸入,而第二個只有年份。我需要合併它們,這不應該太難,但我不知道如何重新格式化第一個日期,因此它指定年份而不是日期。 在此先感謝
我有2個datapanels在大熊貓加載DF的:編輯日期顯示年在熊貓
DF1:
DF2:
他們倆具有相同的年份/國家/地區,但第一個年份以mm/dd/yy格式輸入,而第二個只有年份。我需要合併它們,這不應該太難,但我不知道如何重新格式化第一個日期,因此它指定年份而不是日期。 在此先感謝
educ['Year'] = educ['Year'].year
應該讓你的一年的數據幀,所提供的框架包含日期,如果沒有可以使用to_datetime函數進行轉換,如下所示:
educ['Year'] = [y - 100 for y in pd.to_datetime(edu['Year'], infer_datetime_format=True).year]
它看起來像你需要在世紀明確(以避免它被解析爲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
這也許可以達到你想要的代碼量最少的:
df['Year'] = pd.to_datetime(df['Year']).dt.year - 100
但請記住,將日期更改爲「年」也會將列dtype更改爲int
>>> df.dtypes
Year int64
Country object
dtype: object
它確實推斷日期,但追加.year產生一個錯誤: AttributeError:'系列'對象沒有屬性'年' –
它實際上推斷它不正確,將1950-1965更改爲2050-2065 –
這應該排序您 – hd1