如果我理解正确
time_id <- as.Date(1:14975, origin='1979-01-01', tz='UTC')
将使time_id 成为Date 对象的向量,其行为类似于具有公历表示的整数。但是它可以有分数,这些分数在所述表示中会被忽略,但在均值、加法和减法的计算中不会。
严格来说,Python 中没有这样的东西。 datetime 模块中的主要内容是:
- 日期(日历上的一天)
- datetime(时间线上的一个点,可以是幼稚的,也可以是有时区的)
- timedelta(时间点之间的差异,不要与时间段混淆,可以将其视为时间线的一部分)
- tzinfo(与 UTC 的偏移量(作为 timedelta),其名称可能类似于“CET”)
鉴于日期与时间无关,我不清楚将 tz='UTC' 传递到 as.Date 应该意味着什么。
如果我们将 Python 列表大致等同于 R 向量(可以通过下标和切片来获取其成员的某个序列)。那么
from datetime import date, timedelta
origin = date(1979, 1, 1)
time_id = [origin + timedelta(days=x) for x in range(1,14975)]
将在语义上接近您的 R 代码。也就是说,sum(time_id) 将引发 TypeError,并且您有一个表示日历上日期的类型序列。
如果您希望您的数据显示它们是 UTC,它们需要是时间点:
from datetime import datetime, timedelta, timezone
# timezone.utc is a convenient tzinfo
origin = datetime(1979, 1, 1, tzinfo=timezone.utc)
# origin will get a time of 00:00:00, or midnight on that date in
# the designated timezone
time_id = [origin + timedelta(days=x) for x in range(1, 14975)
当您将 R 代码移植到 Python 时,pandas 包提供了一个高性能的 DataFrame 实现,可以像 R 一样执行矢量化操作。 Pandas 的灵感来自于 R。
获得你想要的东西的一种方法是:
import pandas as pd
time_id: pd.DatetimeIndex # typehint for clarity
time_id = pd.to_datetime(range(1, 14975), origin="1979-01-01", unit="D", utc=True)
熊猫documentation on Time series/date functionality是一个
不错的读物,有助于掌握不同的时间相关概念。
附言。起初,我编辑了其他答案1,2 以返回 UTC 日期时间,而不是他们现在所做的时区天真日期时间。但是我写的评论变得有点庞大和复杂,所以我决定再写一个答案。