如何转换日期以仅获取数字年份[重复]
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设置format
在pandas.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
【讨论】:
这只会从基准列的第一行中提取年份,并且不能提取所有行的年份。如果列中存在不同年份,则此答案不会提取它们。 在问题中不清楚最终输出应该是什么。答案提供了一种获取第一行年份的方法作为示例。 如何转换这些字符串日期... 日期是复数,这意味着所有日期都不是日期之一。 谢谢!解决方案有效以上是关于如何转换日期以仅获取数字年份[重复]的主要内容,如果未能解决你的问题,请参考以下文章