在Dataframe中编辑日期以在熊猫中显示年份

时间:2016-06-10 01:49:08

标签: python date pandas merge panel-data

我已经在熊猫中加载了2个数据通道:

DF1:

enter image description here

DF2:

enter image description here

它们都具有相同的年份/国家,但第一个具有mm / dd / yy格式的年份条目,而第二个仅具有年份。我需要合并它们,这不应该太难,但我不知道如何在第一个中重新格式化日期,因此它指定了年份而不是日期。 提前致谢

3 个答案:

答案 0 :(得分: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]

注意:您可以尝试在apply中进行解析(可能更高效)。

您可以从带有.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 :(得分:1)

也许这可以用最少量的代码实现你想要的目标:

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

但请记住,将日期更改为'year'也会将列dtype更改为int

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

答案 2 :(得分: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]