Python使用pandas将float64类型NumPy数组转datetime64[ns]报错如何解决
错误根因
你传入的float64数组是秒级Unix时间戳,而非纳秒级时间数值,原代码直接将秒级数值当做纳秒处理、且强行指定freq='ns',与数组实际的时间间隔(每天86400秒)不匹配,因此触发值错误。
正确实现方案
有两种常用的实现方式,均可得到你需要的转换结果:
方法1:使用pd.to_datetime指定时间单位(推荐)
直接指定输入数值的单位为秒,pandas会自动完成转换:
import numpy as np import pandas as pd time = np.array([1420156200.0,1420242600.0,1420329000.0], dtype='float64') # 转换为DatetimeIndex dt_index = pd.to_datetime(time, unit='s') # 转为带T分隔符、完整纳秒后缀的字符串格式 result = dt_index.strftime('%Y-%m-%dT%H:%M:%S.%f').to_list()
输出result即可得到你需要的目标结果。
方法2:手动转换为纳秒后构造DatetimeIndex
如果要直接使用DatetimeIndex构造方法,可以先将秒级时间戳乘以1e9转为纳秒,不需要手动指定freq参数:
dt_index = pd.DatetimeIndex(time * 1e9) result = dt_index.strftime('%Y-%m-%dT%H:%M:%S.%f').to_list()
内容的提问来源于stack exchange,提问作者till Kadabra
相关产品推荐
相关产品推荐

