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

时间:2014-11-12 06:25:50

标签: python r datetime 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']])

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

我的问题:

  1. R来源日期为1970-01-01
  2. 的来源
  3. 有没有办法在python中设置原点并转换为datetime.datetime对象?
  4. 我错过了一些比较明显的东西吗?
  5. 由于

2 个答案:

答案 0 :(得分:3)

  

R来源的日期是1970-01-01

来自?Date

  

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


  

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

很怀疑。

as.Date(14610, origin = "1970-01-01")
## [1] "2010-01-01"

  

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

Python datetime docs显示了几种构建日期的方法。

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

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

date.fromordinal(ordinal)文档返回:

  

与公历序号对应的日期,第1年1月1日有序数1

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

答案 1 :(得分:1)

好吧,但是如何在python中正确表达这个数字呢?

import datetime
pd.to_datetime(18402,unit='D', origin='1970-1-1')`

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