Rpy2 base.as_Date字符数据框列到日期列的转换

问题描述

我有一个将日期映射为字符列的rpy2数据框,因为我不希望使用POSIXt / ct列。我以为我可以将该字符列转换为日期,并将其放入r_df中,但我却收到一个浮点数

设置:

from rpy2.robjects.packages import importr
base = importr("base")

简短示例:

> base.as_Date('2020-01-01')
R object with classes: ('Date',) mapped to:
[18262.000000]

> base.as_Date('2020-01-01',format='%Y-%m-%d')
R object with classes: ('Date',) mapped to:
[18262.000000]

我的实际数据框:

> r_df
R object with classes: ('data.frame',) mapped to:
[IntSexpVe...,IntSexpVe...,FloatSexp...,...,StrSexpVe...,StrSexpVe...]
....

> r_df[i]
R object with classes: ('character',) mapped to:
['2016-11-...,'2020-02-...,'2020-07-...,'2019-01-...,'2020-01-...,'2017-01-...,'2020-01-...]

> base.as_Date(r_df[i],format = "%Y-%m-%d")
R object with classes: ('Date',) mapped to:
[17106.000000,18293.000000,18444.000000,17897.000000,18262.000000,17167.000000,18262.000000]

另一尝试使用相同的数据框:

> r_df.rx2(col_name)
R object with classes: ('character','2020-01-...]

> base.as_Date(r_df.rx2(col_name),'%Y-%m-%d')
R object with classes: ('Date',18262.000000]

最后一次尝试是尝试将POSIXt / ct转换为Date,认为可能能够更准确地解析:

> r_df.rx2(col_name)
R object with classes: ('POSIXct','POSIXt') mapped to:
[2016-11-01,2020-02-01,2020-01-01,2017-01-01,2020-01-01]

> base.as_Date(r_df.rx2(col_name),18262.000000]

在r studio中执行以及我的期望是什么

> as.Date('2020-01-01')
[1] "2020-01-01"

这对我来说似乎不正确。我已经将rpy2转换器用于python pandas df到r数据帧的转换。我没有在默认转换器之外执行代码。任何想法如何解决此问题并正确转换字符串

版本:

pandas == 1.0.1

rpy2〜= 3.3.5

R == 4.0.0

解决方法

在R中,Date个对象是带有标记的浮点数(数组),用于告诉R它们是日期。

>>> dt = base.as_Date('2020-01-01')
>>> dt                                              
R object with classes: ('Date',) mapped to:
[18262.000000]

但是,当使用R自己的打印件时:

>>> print(dt)                                       
[1] "2020-01-01"

在R的C-API级别上,这是浮点数

>>> dt.typeof                                                               
<RTYPES.REALSXP: 14>

有一个R类属性,它告诉R这是一个日期。

>>> tuple(dt.rclass)                                                        
('Date',)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...