问题描述
我有一个将日期映射为字符列的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',)