如何转换日期以仅获取数字年份[重复]

Posted

技术标签:

【中文标题】如何转换日期以仅获取数字年份[重复]【英文标题】:How to convert dates to get only the numeric year [duplicate] 【发布时间】:2021-05-04 08:21:33 【问题描述】:

我有以下日期表。

如何将这些字符串日期转换为仅显示数字年份?

我需要在 Python 中为 Pandas 数据框完成此操作。

我知道一种选择是对字符串进行切片,但有没有更有效的方法?

datum
Fri Aug 07, 2020 05:12 UTC
Thu Aug 06, 2020 04:01 UTC
Tue Aug 04, 2020 23:57 UTC
Thu Jul 30, 2020 21:25 UTC
Thu Jul 30, 2020 11:50 UTC
Sat Jul 25, 2020 03:13 UTC
Thu Jul 23, 2020 14:26 UTC
Thu Jul 23, 2020 04:41 UTC
Mon Jul 20, 2020 21:30 UTC
Sun Jul 19, 2020 21:58 UTC
Wed Jul 15, 2020 13:46 UTC
Fri Jul 10, 2020 04:17 UTC
Thu Jul 09, 2020 12:11 UTC
Mon Jul 06, 2020 01:00 UTC
Sat Jul 04, 2020 23:44 UTC
Sat Jul 04, 2020 21:19 UTC
Fri Jul 03, 2020 03:10 UTC
Tue Jun 30, 2020 20:10 UTC
Tue Jun 23, 2020 01:43 UTC

【问题讨论】:

【参考方案1】: 这个问题是重复的,但留下这个答案是为了澄清一个解决方案。 在列转换为datetime64[ns] dtype 后,使用.dt 访问器提取年份。 样本数据都是'UTC',所以pd.to_datetime(df.datum, utc=True)应该可以在不使用format的情况下工作。 需要注意的是,在不指定format的情况下转换列需要更长时间,因为必须推断日期格式。 如果时区不同,请尝试指定格式。 选择正确的format codes设置formatpandas.to_datetime()中。
import pandas as pd

# test data
data = 'datum': ['Fri Aug 07, 2020 05:12 UTC', 'Thu Aug 06, 2020 04:01 UTC', 'Tue Aug 04, 2020 23:57 UTC', 'Thu Jul 30, 2020 21:25 UTC', 'Thu Jul 30, 2020 11:50 UTC', 'Sat Jul 25, 2020 03:13 UTC', 'Thu Jul 23, 2020 14:26 UTC', 'Thu Jul 23, 2020 04:41 UTC', 'Mon Jul 20, 2020 21:30 UTC', 'Sun Jul 19, 2020 21:58 UTC', 'Wed Jul 15, 2020 13:46 UTC', 'Fri Jul 10, 2020 04:17 UTC', 'Thu Jul 09, 2020 12:11 UTC', 'Mon Jul 06, 2020 01:00 UTC', 'Sat Jul 04, 2020 23:44 UTC', 'Sat Jul 04, 2020 21:19 UTC', 'Fri Jul 03, 2020 03:10 UTC', 'Tue Jun 30, 2020 20:10 UTC', 'Tue Jun 23, 2020 01:43 UTC']
df = pd.DataFrame(data)

# if you have varying time zones, try specifying the format
df.datum = pd.to_datetime(df.datum, format='%a %b %d, %Y %H:%M %Z')

# if you have only utc
df.datum = pd.to_datetime(df.datum, utc=True)
df['Year'] = df.datum.dt.year

                    datum  Year
2020-08-07 05:12:00+00:00  2020
2020-08-06 04:01:00+00:00  2020
2020-08-04 23:57:00+00:00  2020
2020-07-30 21:25:00+00:00  2020
2020-07-30 11:50:00+00:00  2020
2020-07-25 03:13:00+00:00  2020
2020-07-23 14:26:00+00:00  2020
2020-07-23 04:41:00+00:00  2020
2020-07-20 21:30:00+00:00  2020
2020-07-19 21:58:00+00:00  2020
2020-07-15 13:46:00+00:00  2020
2020-07-10 04:17:00+00:00  2020
2020-07-09 12:11:00+00:00  2020
2020-07-06 01:00:00+00:00  2020
2020-07-04 23:44:00+00:00  2020
2020-07-04 21:19:00+00:00  2020
2020-07-03 03:10:00+00:00  2020
2020-06-30 20:10:00+00:00  2020
2020-06-23 01:43:00+00:00  2020

【讨论】:

感谢我使用了 utc 方法!【参考方案2】:

假设这列数据在一个名为df的DataFrame中,那么,

df['datum'] = pandas.to_datetime(df['datum'], format='%a %b %d, %Y %H:%M UTC')

将字符串日期转换为日期时间对象。

现在,如果您只想要年份,您可以从表中获取任何对象并访问其year 属性。例如,df['datum'][0].year

如果您想创建一个仅包含年份的列:

df['year'] = df['datum'].dt.year

【讨论】:

这只会从基准列的第一行中提取年份,并且不能提取所有行的年份。如果列中存在不同年份,则此答案不会提取它们。 在问题中不清楚最终输出应该是什么。答案提供了一种获取第一行年份的方法作为示例。 如何转换这些字符串日期... 日期是复数,这意味着所有日期都不是日期之一。 谢谢!解决方案有效

以上是关于如何转换日期以仅获取数字年份[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何解析日期以获取 Python 中的年份 [重复]

如何将文本转换为日期,然后获取年份值?

如何在包含单词、三个字母月份和两位数字年份的字符串中搜索月份和年份并将它们转换为 SQL 中的日期?

转换日期格式:2 位年份到 4 位年份

RedShift:如何将带有年份的整数转换为日期?

如何使用月份和年份格式以精确格式显示日期[重复]