在数据框中编辑日期以在熊猫中显示年份
Posted
技术标签:
【中文标题】在数据框中编辑日期以在熊猫中显示年份【英文标题】:Editing Date in Dataframe to show Year in pandas 【发布时间】:2016-10-10 20:39:37 【问题描述】:我在 pandas 中加载了 2 个数据面板作为 df:
df1:
df2:
它们都具有相同的年份/国家/地区,但第一个具有 mm/dd/yy 格式的年份条目,而第二个只有年份。我需要合并它们,这应该不会太难,但我不知道如何重新格式化第一个日期,所以它指定年份而不是日期。 提前致谢
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:也许这可以用最少的代码实现你想要的:
df['Year'] = pd.to_datetime(df['Year']).dt.year - 100
但请记住,将日期更改为“年份”也会将列 dtype 更改为 int
>>> df.dtypes
Year int64
Country object
dtype: object
【讨论】:
【参考方案3】:educ['Year'] = educ['Year'].year
应该会在数据框中为您提供年份,前提是该框包含日期,如果没有,您可以使用to_datetime 函数对其进行转换,如下所示:
educ['Year'] = [y - 100 for y in pd.to_datetime(edu['Year'], infer_datetime_format=True).year]
【讨论】:
它确实可以正确推断日期,但附加 .year 会产生错误:AttributeError: 'Series' object has no attribute 'year' 它实际上推断不正确,将 1950-1965 更改为 2050-2065 那应该给你排序以上是关于在数据框中编辑日期以在熊猫中显示年份的主要内容,如果未能解决你的问题,请参考以下文章
使用 matplot 的熊猫在 x 轴日期上显示不正确的年份