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

问题描述 投票:3回答:2

接着是这里的问题:

我正在尝试使用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']])

并且我在表示14610的日期字段中获得2010-01-01的日期编号,我怀疑它是1970-01-01的来源。我在datetime模块中找不到任何可以更改日期来源的内容,因此我不知道如何重设日期。

我的问题:

  1. R来源日期1970-01-01的来源吗?
  2. 是否可以在python中为datetime.datetime对象设置原点和隐蔽?
  3. 我在这里想念更明显的东西吗?

谢谢

python r datetime rpy2
2个回答
4
投票

R来源日期1970-01-01的来源吗?

来自?Date

日期表示为自1970-01-01以来的天数,早期日期为负值。


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

非常怀疑。

?Date

是否可以在python中为datetime.datetime对象设置起点和秘密?

Python as.Date(14610, origin = "1970-01-01") ## [1] "2010-01-01" 显示了构造日期的几种方法。

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

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

format(x)文档返回:

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

因此,大概您的问题是,您将日期传递为数字,R将其计算为从1970年1月1日开始的天,而python假定是从0001年1月1日开始。


1
投票

确定,但是如何在python中正确表达此数字?

date.fromordinal(ordinal)

18402对应于2020-05-20。参数origin是默认值,因此可以跳过它。

© www.soinside.com 2019 - 2024. All rights reserved.