如何将numpy浮点型数组转换为datetime数组?
将Numpy浮点数组的时间分量转为'%y/%m/%d %H:%M:%S'格式
这里提供两种可行的方案,分别基于Pandas(高效便捷)和纯Numpy+Python标准库(无额外依赖),处理你的浮点型时间数组:
方案一:使用Pandas快速转换
Pandas对时间序列的处理非常高效,适合批量转换:
import numpy as np import pandas as pd # 模拟你的输入数组 time_arr = np.array([ [2013, 12, 3, 8.3478], [2013, 12, 3, 8.3480], [2013, 12, 3, 8.3482], [2013, 12, 3, 8.3488], [2013, 12, 3, 8.3490], [2013, 12, 3, 8.3492] ], dtype=np.float64) # 转为DataFrame并指定列名 df = pd.DataFrame(time_arr, columns=["year", "month", "day", "hour"]) # 拆分小时列的时、分、秒 df["hour_int"] = df["hour"].astype(int) df["minute_frac"] = (df["hour"] - df["hour_int"]) * 60 df["minute_int"] = df["minute_frac"].astype(int) df["second"] = (df["minute_frac"] - df["minute_int"]) * 60 # 合并为datetime对象,再转成目标格式 df["datetime"] = pd.to_datetime(df[["year", "month", "day", "hour_int", "minute_int", "second"]]) formatted_dates = df["datetime"].dt.strftime("%y/%m/%d %H:%M:%S").tolist() print(formatted_dates)
输出结果示例:
['13/12/03 08:20:52', '13/12/03 08:20:53', '13/12/03 08:20:54', '13/12/03 08:20:56', '13/12/03 08:20:57', '13/12/03 08:20:57']
方案二:纯Numpy+标准库实现(无第三方依赖)
如果不想引入Pandas,可以用循环结合datetime模块处理每一行:
import numpy as np from datetime import datetime time_arr = np.array([ [2013, 12, 3, 8.3478], [2013, 12, 3, 8.3480], [2013, 12, 3, 8.3482], [2013, 12, 3, 8.3488], [2013, 12, 3, 8.3490], [2013, 12, 3, 8.3492] ], dtype=np.float64) formatted_dates = [] for row in time_arr: year, month, day, hour = row # 拆分小时为时分秒 hour_int = int(hour) minute_total = (hour - hour_int) * 60 minute_int = int(minute_total) second = round((minute_total - minute_int) * 60) # 构造datetime并格式化 dt = datetime(int(year), int(month), int(day), hour_int, minute_int, second) formatted_dates.append(dt.strftime("%y/%m/%d %H:%M:%S")) print(formatted_dates)
注意事项
- 浮点型小时转秒时可能存在精度误差,建议用
round()取整,避免出现秒数为59.999999999的情况 - 如果你的数组规模极大,Pandas方案的效率会远高于循环方案
- 所有时间分量(年、月、日)需要确保是合法的日期值,否则
pd.to_datetime或datetime会抛出异常
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

