Research-Study

 

重庆明镜滩项目-11-脚本学习-260122DataPreV5MissAna2

问题1:这个脚本中任务2的代码我没看懂,详细介绍一下功能和代码

我来详细解释任务2的代码功能和实现逻辑。

任务2的功能目标

找出所有指标同时都没有缺失值的时间段。也就是说,某个时间点只有当所有指标都有数据时,这个时间点才算有效。

代码详细解析

# 构建所有指标的共同非缺失掩码
all_valid_mask = pd.notna(df.drop(columns=['InsertTime'])).all(axis=1).values
common_segments = find_continuous_segments(all_valid_mask)

第一行代码拆解:

步骤1: df.drop(columns=['InsertTime'])

  • 移除时间列,只保留指标数据列
  • 例如原本有15列(1个时间列+14个指标列),现在只剩14个指标列

步骤2: pd.notna(...)

  • 对每个单元格判断是否非缺失
  • 返回一个布尔值DataFrame,True表示有数据,False表示缺失(NaN)
  • 形状与原数据相同,例如10000行×14列

步骤3: .all(axis=1)

  • axis=1表示沿着列方向(横向)进行判断
  • 对每一行的所有列进行"与"运算
  • 只有当某行的所有指标都是True时,该行才返回True
  • 返回一个长度为10000的Series,每个值代表该时间点是否所有指标都有效

步骤4: .values

  • 转换为NumPy数组,方便后续处理

举例说明:

假设某个时间点的数据:

指标A: 5.2  (有值 → True)
指标B: NaN  (缺失 → False)
指标C: 3.1  (有值 → True)

经过 .all(axis=1) 后,这一行返回 False(因为指标B缺失)

如果所有指标都有值:

指标A: 5.2  (有值 → True)
指标B: 4.8  (有值 → True)
指标C: 3.1  (有值 → True)

这一行返回 True

第二行代码:

common_segments = find_continuous_segments(all_valid_mask)

调用辅助函数,找出所有连续的True值段落

  • 输入:布尔数组 [False, True, True, True, False, True, False, ...]
  • 输出:连续True段的起止索引 [(1, 4), (5, 6), ...]
  • 表示索引1-3是一个连续有效段,索引5是另一个连续有效段

最终效果

这段代码找出了数据中所有指标都完整的时间段,例如:

  • 时间段1: 2025-02-15 08:00 至 2025-02-20 15:30,共1234个数据点
  • 时间段2: 2025-03-01 10:00 至 2025-03-05 18:45,共567个数据点

这些时间段内的数据可以直接用于建模,无需插值处理。

问题2:

posted on 2026-01-22 20:48  ZVera  阅读(2)  评论(0)    收藏  举报

导航