You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用reticulate如何将Python datetime.time转为R时间类?

解决Reticulate读取Python datetime.time对象的转换问题

核心原因

Python的datetime.time对象与datetime.date对象结构不同,reticulate的py_to_r()函数默认支持直接转换date对象为R的Date类型,但对time对象没有内置转换规则,导致直接调用py_to_r()无法得到预期的R时间类型。


方法1:手动提取时间属性转换为R的hms类型

直接从Python的time对象中提取时、分、秒属性,用R的hms包创建标准时间类型:

# 加载依赖包
library(reticulate)
library(hms)

# 转换时间列
data$time <- do.call(c, lapply(data$time, function(py_time) {
  # 提取Python time对象的属性
  hour <- py_to_r(py_time$hour)
  minute <- py_to_r(py_time$minute)
  second <- py_to_r(py_time$second)
  # 创建hms类型的时间值
  hms(hour = hour, minute = minute, second = second)
}))

执行后,data$time会变成R的hms类型向量,支持标准时间操作与展示。


方法2:先转成字符串再解析

无需额外依赖包,先调用Python对象的字符串方法,再在R中解析为时间类型:

library(reticulate)

# 转换时间列
data$time <- do.call(c, lapply(data$time, function(py_time) {
  # 获取Python time对象的字符串表示
  time_str <- py_to_r(py_time$`__str__`())
  # 解析为R的时间类型
  strptime(time_str, format = "%H:%M:%S")$time
}))

这种方法会得到R的POSIXlt类型的时间部分,可根据需求调整格式。


可选方案:修改Python脚本简化转换

如果允许修改生成数据框的Python脚本,可提前将time列转换为字符串或带默认日期的datetime对象,减少R端的处理工作:

# Python脚本中修改时间列
import pandas as pd

# 假设df是原数据框
# 方案1:转为字符串
df['time'] = df['time'].astype(str)
# 方案2:转为带默认日期的datetime对象
df['time'] = pd.to_datetime('1970-01-01 ' + df['time'].astype(str))

修改后在R中用py_run_file(convert=F)读取时,直接调用py_to_r()即可转换为R的字符型或POSIXct类型。

内容的提问来源于stack exchange,提问作者Aditya Kumar Kasinadhuni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:27:25