在数据框中编辑日期以在熊猫中显示年份

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 那应该给你排序

以上是关于在数据框中编辑日期以在熊猫中显示年份的主要内容,如果未能解决你的问题,请参考以下文章

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

如何用'0'填充日期时间字符串以在熊猫中正确排序

如何按多列分组以在熊猫数据框中列出

使用 matplot 的熊猫在 x 轴日期上显示不正确的年份

在日期控件中提取日期数据,并在另一个文本框中显示其年份加1 |

无法获取引导日期时间选择器以在表单字段中显示格式化的数据库值