基于时长不等的逐分钟Numpy数组数据计算每日平均温度
这个场景太常见了——传感器随机启停导致每日数据量参差不齐,直接按1440条切片肯定踩坑。下面给你两种实用解法,按需选择:
方法一:用Pandas快速实现(推荐)
Pandas的分组功能天生就是为这种场景设计的,代码简洁还不容易出错:
- 先把numpy数组转换成Pandas的时间序列和DataFrame:
import pandas as pd import numpy as np # 假设你的dates和temp是numpy数组 dates = np.array(['2017-10-24 06:18:00.000', '2017-10-24 06:19:00.000', '2018-11-23 16:56:00.000']) temp = np.array([1, 2, 5]) # 把日期字符串转成Pandas datetime类型 dt_series = pd.to_datetime(dates) # 提取日期部分(忽略时分秒)作为分组键 df = pd.DataFrame({'temperature': temp, 'date': dt_series.dt.date})
- 按日期分组计算平均温度:
# 分组求均值 daily_average = df.groupby('date')['temperature'].mean() # 如果需要转回numpy数组,直接用.values daily_average_np = daily_average.values # 对应的日期可以用daily_average.index获取
注意:如果你的日期字符串格式比较特殊,转换时可以指定format参数避免报错,比如:pd.to_datetime(dates, format='%Y-%m-%d %H:%M:%S.%f')
方法二:纯Numpy实现(不依赖第三方库)
如果不想引入Pandas,纯Numpy也能搞定,核心是把日期截断到“天”精度:
- 将日期字符串转换为numpy的
datetime64[D]类型(按天截断):
import numpy as np dates = np.array(['2017-10-24 06:18:00.000', '2017-10-24 06:19:00.000', '2018-11-23 16:56:00.000']) temp = np.array([1, 2, 5]) # 转换为天精度的datetime64,同一天的记录会被统一成同一个日期值 dates_daily = np.array(dates, dtype='datetime64[D]')
- 获取所有唯一日期,遍历计算每日均值:
# 获取所有不重复的日期 unique_dates = np.unique(dates_daily) daily_average = [] for day in unique_dates: # 筛选出当天的所有温度数据 mask = (dates_daily == day) daily_temp_data = temp[mask] # 计算均值并加入列表 daily_average.append(np.mean(daily_temp_data)) # 转成numpy数组 daily_average_np = np.array(daily_average)
两种方法都能完美处理单日数据量从8条到1440条的情况,不用手动计算天数或者索引,完全按日期自动分组。
内容的提问来源于stack exchange,提问作者Beaker
相关产品推荐
相关产品推荐

