如何基于Pandas DataFrame最后一个有效值时间戳获取近7天数据
解决方案
步骤说明
要实现基于最后一个非NaN值的时间戳往前推7天筛选数据,可按以下逻辑操作:
- 定位
Values列最后一个非NaN值对应的时间戳索引 - 以该时间戳为终点,计算往前7天的起始时间
- 根据时间范围筛选数据,同时处理全表NaN的极端情况
代码实现
import pandas as pd # 获取最后一个非NaN值的时间戳索引 last_valid_ts = data['Values'].last_valid_index() # 处理全表NaN的极端情况 if last_valid_ts is None: dataW = pd.DataFrame(columns=data.columns) else: # 计算起始时间:最后一个有效时间戳往前推7天 start_ts = last_valid_ts - pd.Timedelta(days=7) # 筛选目标时间区间内的数据 dataW = data.loc[start_ts:last_valid_ts]
代码解释
data['Values'].last_valid_index():Pandas内置方法,直接高效获取Values列最后一个非NaN值对应的时间戳索引- 加入
last_valid_ts is None判断:避免全表Values都是NaN时出现报错,此时返回空DataFrame loc[start_ts:last_valid_ts]:利用Pandas时间索引的切片特性,精准筛选目标区间内的所有数据
示例验证
针对你提供的示例DataFrame:
- 最后一个非NaN值的时间戳为
2022-03-22 13:24:00+00:00 - 往前推7天得到起始时间
2022-03-15 13:24:00+00:00 - 筛选后
dataW包含以下两行数据:
| timestamp | Values |
|---|---|
| 2022-03-17 13:21:00+00:00 | 15.2 |
| 2022-03-22 13:24:00+00:00 | 17.8 |
内容的提问来源于stack exchange,提问作者Sara.SP92
相关产品推荐
相关产品推荐

