pandas连续datetime索引差值nan成因及间隔值可靠提取方法
问题解答
nan来源说明
pandas的diff()方法的逻辑是逐行计算当前元素与前一个元素的差值,第一个元素没有对应的前序元素,所以第一个差值固定为nan,这就是你得到的唯一值数组第一个元素为nan的原因。
直接取delta[1]的可靠性分析
这种方式不可靠,存在多个风险点:
- 当索引长度<=1时,
diff()结果全为nan,去重后的数组只有[nan],取下标1会直接触发索引越界报错 - 当索引不是严格等间隔时,去重后的数组除了
nan外会存在多个不同的间隔值,取delta[1]只能拿到第一个出现的间隔,无法识别间隔不统一的异常,也没法拿到全部间隔值 - 硬编码下标取值的逻辑健壮性极差,只要前置逻辑有变动(比如后续调整了数据处理顺序,或者pandas版本迭代对
unique()返回顺序做了调整),很容易出现非预期错误
推荐写法
过滤掉nan之后再取值即可,同时可以增加长度判断覆盖异常场景:
import pandas d = pandas.DataFrame({"a": [x for x in range(5)]}) d.index = pandas.date_range("2021-01-01 00:00:00", "2021-01-01 01:00:00", freq="15min") # 去掉nan后再去重 delta = d.index.to_series().diff().astype("timedelta64[m]").dropna().unique() if len(delta) == 1: # 固定间隔场景 interval = delta[0] print(interval) # 输出15.0 else: # 间隔不统一的异常处理逻辑 print("索引间隔不唯一", delta)
内容的提问来源于stack exchange,提问作者d.b
相关产品推荐
相关产品推荐

