Python时间序列缺失值处理(日期缺失填充)完全教程-附Python完整例程

前言

因近期进行时间序列分析时遇到了数据预处理中的缺失值处理问题,其中日期缺失和填充在网上没有找到较好较全资料,耗费了我一晚上工作时间,所以下面我对这次时间序列缺失值处理学习做了以下小结以供之后同行们参考指正。

时间序列缺失值处理

一、编程前准备

        收集时间序列数据,相信看这篇博客的各位已经完成了这步。

        需要安装pandas模块,并利用Python的Lib文件夹自带的datetime库(当时我因为在Pycharm环境中没看到datetime模块又去安装了DateTime模块并看了DateTime英文文档,发现这个对象的参数并不能满足时间序列缺失填充的需求,所以又下了datetime2模块,在import  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

 

  • 12
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值