Python时间序列缺失值处理:日期填充实战指南

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 3人浏览过
原创

本文详细讲解在Python中利用Pandas处理时间序列数据时遇到的日期缺失问题。通过示例代码展示如何构建连续日期序列,并将原始数据映射至完整时间轴,实现缺失日期的自动填充与插值替换。适合需要进行时间序列分析且遇到数据预处理瓶颈的开发者参考。

前言与背景

前言

近期在进行时间序列分析时,我遇到了数据预处理阶段常见的缺失值处理难题。特别是关于日期缺失及填充的问题,网络上缺乏系统且全面的参考资料,为此我耗费了大量工作时间进行摸索。现将此次关于时间序列缺失值处理的学习心得整理如下,旨在为同行提供一定的参考与指正依据。

时间序列缺失值处理

环境准备与模块安装

一、编程前准备

首先需收集时间序列数据,相信阅读本文的读者已具备这一基础。

其次需安装pandas模块,并调用Python标准库中的datetime模块。值得注意的是,部分开发者可能在PyCharm环境中未直接看到datetime模块,进而尝试安装第三方DateTime模块或查阅其英文文档,发现其参数无法满足时间序列缺失填充的需求。若进一步尝试datetime2模块,会发现Python本身已内置datetime库,这一过程对初学者而言颇具波折。

二、编程与讲解

由于个人数据并非通用的时间序列格式,以下程序是基于通用时间序列数据改编的示例,可能与我的原始数据不完全适用,但其中涉及的步骤与原理与原程序一致,对于初步接触该领域的同行仍具有借鉴意义。

核心代码实现与原理


import pandas as pd
import datetime
def load_Data():
  #加载数据
  df0 = pd.read_csv("Path/power.csv",index_col='user_id')
  df0['record_date'] = pd.to_datetime(df0['record_date'])
  return df0
 
#把datetime转成字符串
def datetime_toString(dt):
  return dt.strftime("%Y-%m-%d")
 
#把字符串转成datetime
def string_toDatetime(string):
  return datetime.strptime(string, "%Y-%m-%d")
 
#缺失值处理,插值替换
def data_Full():
  df1 = load_Data()  #加载数据
  date_start = df1.iloc[0, 0] #初始时间
  df1_date = df1['record_date'].tolist() #数据日期转为列表
  df1_data = df1[ 'value'].tolist()  #数据值转为列表
  act = 365    #实际期望日期序列长度
  for j in range(0, len(df1_date)):
    if len(df1_date) < act:
      date0 = date_start
      date_s = datetime_toString(date0)  #日期转换为字符串类型,使日期可进行逻辑比较
      date_i = df1_date[j]  #顺序选取数据中日期列表里对应各日期
      date_is = datetime_toString(date_i)
      while date_is != date_s:  #如数据中日期列表与期望日期序列不相等,即存在缺失值执行while程序
        nada = (df1_data[j] + df1_data[j+1]) / 2  #计算缺失处左右相邻插值
        adda = [date0, nada]  
        date_da = pd.DataFrame(adda).T
        date_da.columns = df1.columns
        df1 = pd.concat([df1, date_da]) #将缺失日期加入数据列表中
        date0 += datetime.timedelta(days=1) #日期加一
        date_s = datetime_toString(date0)  #日期字符串转日期时间类型
      date0 += datetime.timedelta(days=1) #日期加一
      date_s = datetime_toString(date0)  #日期字符串转日期时间类型
  df1 = df1.sort_values(by=['record_date'])
  return df1

总结

总结

以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助,感谢大家的支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表