1. 程式人生 > 實用技巧 >Python處理時間序列缺失值

Python處理時間序列缺失值

import pandas as pd
import datetime


def load_Data():
# 載入資料
df0 = pd.read_csv(r'D:\PythonCharm\Python\Infos.csv')
df0['time'] = pd.to_datetime(df0['time'])
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() # 載入資料
# a = df1.iloc[len(df1)-7, 0]
date_start = df1.iloc[len(df1)-1, 0] # 初始時間
df1_date = df1['time'].tolist() # 資料日期轉為列表
df1_data = df1['price'].tolist() # 資料值轉為列表
info = []
#df1_date = list(reversed(df1_date))
#df1_data = list(reversed(df1_data))
times = ''
act = 365 * 26 # 實際期望日期序列長度
for j in range(0, len(df1_date)):
if len(info) < 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]) # 將前面的值直接賦值給缺失的值
info.append(pd.DataFrame({'time': date0, 'price': nada}, index=[0]))
date0 += datetime.timedelta(days=1) # 日期加一
date_s = datetime_toString(date0) # 日期字串轉日期時間型別
date0 += datetime.timedelta(days=1) # 日期加一
date_s = datetime_toString(date0) # 日期字串轉日期時間型別
info.append(pd.DataFrame({'time': date_is, 'price': df1_data[j]}, index=[0]))
date_start = date0
info = pd.concat(info, ignore_index=True)
return info


d = data_Full()
print(d.columns)
print(len(d))
message = []
for time, price in d.values:
message.append(pd.DataFrame({'time': time, 'price': price}, index=[0]))
qhdInfo = pd.concat(message, ignore_index=True)
qhdInfo.to_csv('info.csv', index=False)
沒處理之前資料



處理之後的資料