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

如何将时间序列的numpy数组重塑为24小时×天数的矩阵

问题:将时间序列NumPy数组整理为24小时×天数的矩阵

如何将时间序列的numpy数组整理为一侧为24小时、另一侧为天数的矩阵?例如,若我有一组始于2022年4月4日3时、止于2022年4月5日23时的温度值numpy数组,该如何将其整理为形状为24×2的数组?

示例数据:

2022-04-04 03:00:00   -14.310345
2022-04-04 04:00:00   -15.910526
2022-04-04 05:00:00   -16.983607
2022-04-04 06:00:00   -16.913793
2022-04-04 07:00:00   -14.558333
2022-04-04 08:00:00   -12.308197
2022-04-04 09:00:00   -14.026667
2022-04-04 10:00:00   -14.249180
2022-04-04 11:00:00   -13.754237
2022-04-04 12:00:00   -15.513793
2022-04-04 13:00:00   -16.116667
2022-04-04 14:00:00   -16.140385
2022-04-04 15:00:00   -14.542593
2022-04-04 16:00:00   -11.738983
2022-04-04 17:00:00   -14.703333
2022-04-04 18:00:00   -16.401754
2022-04-04 19:00:00   -16.650000
2022-04-04 20:00:00   -14.365517
2022-04-04 21:00:00   -16.900000
2022-04-04 22:00:00   -16.805085
2022-04-04 23:00:00   -16.501639
2022-04-05 00:00:00   -13.478333
2022-04-05 01:00:00   -16.383333
2022-04-05 02:00:00   -16.833898
2022-04-05 03:00:00   -16.737705
2022-04-05 04:00:00   -13.729508
2022-04-05 05:00:00   -16.415254
2022-04-05 06:00:00   -16.845763
2022-04-05 07:00:00   -16.870833
2022-04-05 08:00:00   -14.007692
2022-04-05 09:00:00   -15.152727
2022-04-05 10:00:00   -15.581356
2022-04-05 11:00:00   -16.036667
2022-04-05 12:00:00   -13.496429
2022-04-05 13:00:00   -14.760656
2022-04-05 14:00:00   -16.254237
2022-04-05 15:00:00   -16.733333
2022-04-05 16:00:00   -11.578689
2022-04-05 17:00:00   -13.713333
2022-04-05 18:00:00   -15.933333
2022-04-05 19:00:00   -17.070492
2022-04-05 20:00:00   -15.570492
2022-04-05 21:00:00   -15.730508
2022-04-05 22:00:00   -17.370000
2022-04-05 23:00:00   -16.962295

解决方案

方法1:用Pandas处理(更简便)

利用Pandas的时间序列工具可以快速完成分组和重塑:

  1. 将原始数据转为带时间索引的DataFrame,拆分出日期和小时维度
  2. 通过透视表将数据重组为「小时×日期」的结构
  3. 转换为NumPy数组即可

代码示例:

import pandas as pd
import numpy as np

# 模拟原始数据(替换为你实际的时间和温度数组)
raw_data = [
    ["2022-04-04 03:00:00", -14.310345],
    ["2022-04-04 04:00:00", -15.910526],
    # ... 其余数据省略
    ["2022-04-05 23:00:00", -16.962295]
]

# 构建DataFrame并解析时间
df = pd.DataFrame(raw_data, columns=["timestamp", "temp"])
df["timestamp"] = pd.to_datetime(df["timestamp"])
df["temp"] = df["temp"].astype(float)

# 提取日期和小时字段
df["date"] = df["timestamp"].dt.date
df["hour"] = df["timestamp"].dt.hour

# 生成透视表:行=小时,列=日期,值=温度
pivot_table = df.pivot(index="hour", columns="date", values="temp")

# 转为24×2的NumPy数组
result = pivot_table.to_numpy()
print(result.shape)  # 输出 (24, 2)

方法2:纯NumPy实现

如果不需要依赖Pandas,可以通过时间戳的数值运算来分组:

  1. 将时间字符串转为datetime64类型,提取小时和日期基准
  2. 对日期去重,确定总天数
  3. 初始化数组并按小时和日期索引填充温度值

代码示例:

import numpy as np

# 模拟原始数据
timestamps_str = np.array([
    "2022-04-04 03:00:00", "2022-04-04 04:00:00",
    # ... 其余数据省略
    "2022-04-05 23:00:00"
])
temps = np.array([
    -14.310345, -15.910526,
    # ... 其余数据省略
    -16.962295
], dtype=np.float64)

# 转换为小时精度的datetime64数组
timestamps = np.array(timestamps_str, dtype="datetime64[h]")

# 提取小时(0-23)和日期基准(当天0点)
hours = timestamps.astype(int) % 24
dates = timestamps.astype("datetime64[D]")

# 获取唯一日期及对应的索引
unique_dates, date_idx = np.unique(dates, return_inverse=True)
num_days = len(unique_dates)

# 初始化结果数组,缺失值用nan填充
result = np.full((24, num_days), np.nan)
result[hours, date_idx] = temps

print(result.shape)  # 输出 (24, 2)

说明

  • 如果原始数据存在缺失的小时段,结果数组对应位置会是nan,可根据需求用np.nanfill或统计值填充
  • 示例中2022-04-04的00:00-02:00没有数据,所以结果数组的0-2行第一列会是nan

内容的提问来源于stack exchange,提问作者yeong nam tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:50:23