如何将numpy数组中拆分的字符型时间转换为标准DateTime格式
问题描述
我有一组格式特殊的时间数据,以拆分的字符串形式存储,示例输出如下:
print(time) print(time[0]) print(type(time[0])) print(type(time[0][0])) [['2' '0' '2' ... '3' '2' '3'] ['2' '0' '2' ... '4' '2' '3'] ['2' '0' '2' ... '5' '2' '4'] ... ['2' '0' '2' ... '5' '2' '7'] ['2' '0' '2' ... '6' '2' '6'] ['2' '0' '2' ... '7' '2' '0']] ['2' '0' '2' '2' '0' '5' '2' '1' '0' '7' '1' '3' '2' '3'] <class 'numpy.ma.core.MaskedArray'> <class 'numpy.str_'>
需要将数组的每一行转换为标准DateTime格式(例如把['2' '0' '2' '2' '0' '5' '2' '1' '0' '7' '1' '3' '2' '3']转为20220521-07:13:23),并处理所有行数据。
解决方案
遍历处理法
适合小数据量或需要逐行调试的场景:
import numpy as np from datetime import datetime # 示例数据 time_arr = np.ma.MaskedArray([ ['2','0','2','2','0','5','2','1','0','7','1','3','2','3'], ['2','0','2','3','0','4','1','5','1','0','2','2','1','5'] ]) formatted_times = [] for row in time_arr: # 拼接每行字符为完整时间字符串 raw_time = ''.join(row) # 解析为datetime对象 dt = datetime.strptime(raw_time, '%Y%m%d%H%M%S') # 格式化为目标样式 formatted_times.append(dt.strftime('%Y%m%d-%H:%M:%S')) print(formatted_times) # 输出: ['20220521-07:13:23', '20230415-10:22:15']
矢量化处理法
适合大数据量,效率更高:
import numpy as np from datetime import datetime # 批量拼接每行字符 raw_time_strings = np.char.add.reduce(time_arr, axis=1) # 批量转换为datetime对象 dt_objects = np.array([datetime.strptime(s, '%Y%m%d%H%M%S') for s in raw_time_strings]) # 批量格式化 formatted_times = np.array([dt.strftime('%Y%m%d-%H:%M:%S') for dt in dt_objects]) print(formatted_times)
核心步骤说明
- 拼接字符:通过
''.join(row)或np.char.add.reduce把每行的单个字符元素合并为14位的时间字符串(格式为YYYYMMDDHHMMSS) - 解析为datetime:用
datetime.strptime将字符串转换为可操作的datetime对象 - 格式化输出:用
strftime将datetime对象转为要求的YYYYMMDD-HH:MM:SS格式
内容的提问来源于stack exchange,提问作者Dong-gyun Kim
相关产品推荐
相关产品推荐

