无法将 R 日期序数准确转换为 Python

Tah*_*sha 4 python datetime r rpy2

从这里的问题开始:

我正在尝试使用 Rpy2 手动创建该系列

import rpy2.robjects as ro
from rpy2.robjects.packages import importr
import pandas.rpy.common as com

pa = importr("pa")

ro.r("data(jan)")
jan = com.load_data('jan')

jan_r  = com.convert_to_r_dataframe(jan)

name = ro.StrVector([str(i) for i in jan['name']])
sector = ro.StrVector([str(i) for i in jan['sector']])
date = ro.StrVector([str(i) for i in jan['date']])
Run Code Online (Sandbox Code Playgroud)

14610在日期字段中得到了代表2010-01-01我怀疑是1970-01-01来源的日期编号。我在模块中找不到任何datetime允许我更改日期来源的内容,所以我不知道如何重置它。

我的问题:

  1. 是 R 来源日期的原点吗1970-01-01
  2. 有没有办法datetime.datetime在 python 中设置原点并隐藏到对象?
  3. 我在这里错过了一些更明显的东西吗?

谢谢

Ric*_*ton 5

是 R 来源日期的原点吗1970-01-01

?Date

日期表示为自 1970 年 1 月 1 日以来的天数,较早的日期为负值。


我在代表 2010-01-01 的日期字段中得到日期编号 14610,我怀疑它是 1970-01-01 的起源。

很好怀疑。

as.Date(14610, origin = "1970-01-01")
## [1] "2010-01-01"
Run Code Online (Sandbox Code Playgroud)

有没有办法在 python 中设置原点并隐藏到 datetime.datetime 对象?

Python日期时间文档展示了构造日期的几种方法。

您可以使用语法,其中可以使用、和 来datetime.date(year, month, day)从 R 日期中检索这些值,其中代表您的日期向量。year(x)month(x)mday(x)x

您可以使用date.fromtimestamp(timestamp)语法,其中可以使用从 R 日期检索时间戳format(x)

文档date.fromordinal(ordinal)返回:

对应于公历序数的日期,其中第 1 年的 1 月 1 日的序数为 1

所以大概你的问题是你将日期作为数字传递,R 计算为从 1970 年 1 月 1 日开始的天数,而 python 假设是从 0001 年 1 月 1 日开始。