pandas2ri.ri2py_dataframe将R日期转为浮点数而非ISO-8601格式的问题
解决R-Pandas跨环境转换中ISO日期变为浮点数的问题
我之前也踩过rpy2日期类型转换的坑!你遇到的这个情况——用pandas2ri.py2ri把Pandas DataFrame转成R对象,经R的ymd()生成ISO-8601格式日期后,再用pandas2ri.ri2py_dataframe转回Pandas就变成浮点数,本质是rpy2在处理R日期类型(POSIXct/POSIXlt或Date)与Pandas datetime64类型时的映射偏差:R的日期底层是数值型(POSIXct是从1970-01-01开始的秒数,Date是天数),如果转换时没有自动识别并映射为Pandas日期类型,就会直接保留原始浮点数。
给你几个实用的临时解决方案,能快速解决问题:
手动将浮点数转回日期:当数据回到Pandas后,直接用
pd.to_datetime()针对性转换日期列,根据R侧的日期类型选择单位:# 若R侧是POSIXct类型(带时区的日期时间),单位用秒 df['notification_date'] = pd.to_datetime(df['notification_date'], unit='s') # 若R侧是Date类型(仅日期),单位用天,指定原点为1970-01-01 df['notification_date'] = pd.to_datetime(df['notification_date'], unit='D', origin='1970-01-01')在R侧提前处理日期格式:调用
r_generate_notifications()后,把生成的日期转成字符串格式再返回,这样Pandas能自动识别为日期类型:# 在R函数中转换日期为字符串 processed_data$date_column <- as.character(processed_data$date_column)升级rpy2版本:旧版本的pandas2ri组件可能存在类型映射bug,尝试更新到最新版rpy2,说不定官方已经修复了类似问题:
pip install --upgrade rpy2
你提到已经在Pandas GitHub提交了issue#21044,这非常棒!在官方修复之前,上面的方案应该能帮你顺利推进工作。
内容的提问来源于stack exchange,提问作者Blairg23
相关产品推荐
相关产品推荐

