Python:时间序列插值实现

 

#插入中间值
import pandas as pd
import datetime
def load_Data():
    df0=pd.read_excel('C:\\Users\\Administrator\\Desktop\\最小二乘清洗\\截取需要插值的时间段.xlsx',usecols=[0,1,2],dtype={'风速':float,'发电机有功功率':float})
    df0['时间'] = pd.to_datetime(df0['时间'])
    return df0

# 把datetime转成字符串
def datetime_toString(dt):
    return dt.strftime("%Y-%m-%d %H:%M:%S")


# 把字符串转成datetime
def string_toDatetime(string):
    return datetime.strptime(string, "%Y-%m-%d %H:%M:%S")


# 缺失值处理,插值替换
def data_Full():
    df1 = load_Data()  # 加载数
    #print(type(df1))
    date_start = df1.iloc[0, 0]  # 初始时间

    date_list = df1['时间'].tolist()  # 数据日期转为列表
    #print(len(date_list))
    data_list = df1["风速"].tolist()          # 数据值转为列表
    data_listt=df1['发电机有功功率'].tolist()
    #df2_data = df1['发电机有功功率'].tolist()

    act = 660  # 实际期望日期序列长度

    if len(date_list) < act:
        for j in range(0, len(date_list)):
            date_start = date_start     #初始时间
            #print(date_start)
            date_str = datetime_toString(date_start)  # 日期转换为字符串类型,使日期可进行逻辑比较
            #print(date_str)
            date_i = date_list[j]  # 顺序选取数据中日期列表里对应各日期
            date_is = datetime_toString(date_i)  #转换为字符串类型
            #print(date_is)

            while date_is != date_str:  # 如数据中日期列表与期望日期序列不相等,即存在缺失值执行while程序
                #print(1)
                nada = (data_list[j-1] + data_list[j]) / 2  # 计算缺失处左右相邻插值
                nadaa=(data_listt[j-1]+data_listt[j])/2

                adda = [date_start,nada,nadaa]

                date_da = pd.DataFrame(adda).T

                date_da.columns = df1.columns
                print(date_da)
                df1 = pd.concat([df1, date_da])  # 将缺失日期加入数据列表中

                date_start += datetime.timedelta(minutes=1)  # 日期加一
                date_str = datetime_toString(date_start)  # 日期字符串转日期时间类型
            date_start += datetime.timedelta(minutes=1)  # 日期加一
            #print(date_start)
            #date_str = datetime_toString(date_start)  # 日期字符串转日期时间类型
            #print(j)
            print('---------------------------')
    df1 = df1.sort_values(by=['时间'])
    df1.to_excel('C:\\Users\\Administrator\\Desktop\\最小二乘清洗\\时间插值.xlsx')
    return df1
if __name__ == '__main__':
    data_Full()
本文程序参考自:Python时间序列缺失值处理(日期缺失填充)完全教程-附Python完整例程_物是人非事事休 欲语泪湿春衫袖-CSDN博客_时间序列 缺失值填充

 并经本人修改,可实现缺失时间的插值。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值