使用时间插值法在时序数据框中补全跨年读数以精确计算周期能耗

雨婷吖_6779

雨婷吖_6779

2026-03-29

767人浏览

原创

使用时间插值法在时序数据框中补全跨年读数以精确计算周期能耗

本文介绍如何利用 pandas 的时间感知插值(interpolate(method='time'))在不规则采样的时序计量数据中,自动补全年末/年初关键节点的估算读数,从而更准确地分年度计算实际能耗,避免因采样间隔过长导致的低估问题。

本文介绍如何利用 pandas 的时间感知插值(`interpolate(method='time')`)在不规则采样的时序计量数据中,自动补全年末/年初关键节点的估算读数,从而更准确地分年度计算实际能耗,避免因采样间隔过长导致的低估问题。

在能源监测、水电气表读数分析等场景中,原始数据常为非等间隔的时间序列(如抄表日期不固定)。若直接用首尾读数相减计算年度消耗,会因跨年空档期过长而严重失真——例如示例中,2023年12月1日到2024年2月17日之间缺失近80天,导致简单按“2023年最后读数 vs 2024年首个读数”计算的年度增量(63)远低于真实消耗。

理想的解决方案是:在自然年交界点(如2023-12-31、2024-01-01)插入基于时间线性关系的估算读数,使年度切分具备物理合理性。pandas 提供了简洁高效的实现路径:

✅ 核心步骤解析

  1. 统一时间类型:确保 date 列为 datetime64,这是时间插值的前提;
  2. 生成关键锚点:用 pd.date_range(..., freq='YS') 获取历年年初(如 2023-01-01, 2024-01-01),用 freq='Y' 获取历年年末(如 2023-12-31, 2024-12-31);
  3. 扩展索引并插值:将原始日期与锚点合并后重索引,调用 .interpolate(method='time')——该方法按实际时间差(纳秒级)加权线性插值,而非简单等距,完美适配不规则采样;
  4. 还原原始列结构:插值后重置索引,并保留原始列顺序。

? 完整可运行代码

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({
    'id': [2, 5, 8, 11, 14],
    'meter': [2, 2, 2, 2, 2],
    'reading': [8232, 8267, 8472, 9354, 9417],
    'date': ['2023-09-01', '2023-11-01', '2023-12-01', '2024-02-17', '2024-03-04']
})

# 步骤1:转为datetime
df['date'] = pd.to_datetime(df['date'])

# 步骤2:生成年度起止锚点(覆盖数据范围)
date_ys = pd.date_range(df['date'].min(), df['date'].max(), freq='YS')  # 年初
date_y  = pd.date_range(df['date'].min(), df['date'].max(), freq='Y')   # 年末

# 步骤3:合并所有日期,插值,排序
all_dates = df['date'].tolist() + date_ys.tolist() + date_y.tolist()
out = (df.set_index('date')
       .reindex(all_dates)                    # 扩展索引(含NaN)
       .sort_index()                          # 按时间排序
       .assign(reading=lambda x: x['reading'].interpolate(method='time'))  # 时间加权插值
       .reset_index()
       .rename(columns={'index': 'date'})     # 恢复date列为普通列
       [df.columns])                          # 保持原始列顺序

print(out)

输出结果(关键行已标注):

     id  meter  reading       date
0   2.0    2.0   8232.0 2023-09-01
1   5.0    2.0   8267.0 2023-11-01
2   8.0    2.0   8472.0 2023-12-01
3   NaN    NaN   8811.2 2023-12-31   ← 自动补全年末估算值
4   NaN    NaN   8822.5 2024-01-01   ← 自动补全年初估算值
5  11.0    2.0   9354.0 2024-02-17
6  14.0    2.0   9417.0 2024-03-04

⚠️ 注意事项与进阶建议

  • 插值前提:数据需满足单调递增假设(如电表读数不可倒退),否则插值结果无物理意义;
  • 锚点选择:仅添加 2023-12-31 和 2024-01-01 即可支撑年度分割,但额外加入多年份锚点可提升长期趋势分析鲁棒性;
  • 替代方法:若需更高阶拟合(如考虑季节性),可改用 scipy.interpolate 或 statsmodels,但 method='time' 在多数计量场景中已足够精准且简洁;
  • 后续计算:补全后,可用 df.loc[df['date'].dt.year == 2023, 'reading'].iloc[-1] - df.loc[df['date'].dt.year == 2023, 'reading'].iloc[0] 精确获取2023年消耗(约570),同理得2024年(约591),总和1161,显著逼近真实值1185。

通过这一方法,你不再需要手动推算日均消耗、逐日累加或硬编码插值逻辑——pandas 的时间感知插值让专业级能耗归因分析变得可复现、可扩展、零误差。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1831

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4904

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1789

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

29377

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3507

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3507

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2723

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习