yfinance返回Pandas DataFrame的13位Unix时间戳列转datetime失败如何解决
代码运行失败的核心原因
- 第一,Python标准库的
datetime.fromtimestamp()仅支持传入单个数值类型的时间戳,你传入的df['UnixDate']是pandas Series结构(整列数据),标准库方法不支持批量处理这种结构,直接调用必然报错。 - 第二,你对时间戳精度的判断有误:13位Unix时间戳是毫秒级精度,不是秒级,就算你用循环逐行调用
datetime.fromtimestamp(),转换出来的时间也会和实际时间完全不符。
正确实现方案
直接使用pandas原生提供的pd.to_datetime()方法即可,该方法原生支持整列批量转换,还可以直接指定时间戳的单位,无需额外处理,代码如下:
# 13位毫秒级时间戳指定unit为ms,按需调整strftime的格式参数即可 df['DateCol'] = pd.to_datetime(df['UnixDate'], unit='ms').dt.strftime('%Y-%m-%d')
如果需要datetime类型的列而非字符串格式,删除末尾的.dt.strftime('%Y-%m-%d')部分即可。
你之前调整datetime导入语句的操作没有必要,代码运行失败和导入写法完全无关。
内容的提问来源于stack exchange,提问作者TameAim
相关产品推荐
相关产品推荐

