【问题标题】:Can't convert R date ordinal to Python accurately无法准确地将 R 日期序数转换为 Python
【发布时间】:2015-01-08 22:18:44
【问题描述】:

从这里的问题开始:

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

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

我的问题:

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

谢谢

【问题讨论】:

    标签: python r datetime rpy2


    【解决方案1】:

    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"
    

    有没有办法在 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 日开始。

    【讨论】:

    • 感谢@RichieCotton。在这种情况下,我无法选择数据的输入格式。我想我只是将 timedelta 添加到这种情况下的数字中。感谢您的帮助。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多