#插入中间值
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博客_时间序列 缺失值填充
并经本人修改,可实现缺失时间的插值。