Python時(shí)間序列缺失值的處理方法(日期缺失填充)
前言
因近期進(jìn)行時(shí)間序列分析時(shí)遇到了數(shù)據(jù)預(yù)處理中的缺失值處理問(wèn)題,其中日期缺失和填充在網(wǎng)上沒(méi)有找到較好較全資料,耗費(fèi)了我一晚上工作時(shí)間,所以下面我對(duì)這次時(shí)間序列缺失值處理學(xué)習(xí)做了以下小結(jié)以供之后同行們參考指正。
時(shí)間序列缺失值處理
一、編程前準(zhǔn)備
收集時(shí)間序列數(shù)據(jù),相信看這篇博客的各位已經(jīng)完成了這步。
需要安裝pandas模塊,并利用Python的Lib文件夾自帶的datetime庫(kù)(當(dāng)時(shí)我因?yàn)樵赑ycharm環(huán)境中沒(méi)看到datetime模塊又去安裝了DateTime模塊并看了DateTime英文文檔,發(fā)現(xiàn)這個(gè)對(duì)象的參數(shù)并不能滿足時(shí)間序列缺失填充的需求,所以又下了datetime2模塊,在import datetime2時(shí)發(fā)現(xiàn)Python自帶datetime庫(kù),血虐啊,真是對(duì)菜鳥(niǎo)不要太善良)。
二、編程與講解
因?yàn)槲业臄?shù)據(jù)不是普遍形式的時(shí)間序列形式,而下面程序是我按普遍形式時(shí)間序列數(shù)據(jù)改編的,與我數(shù)據(jù)不適用,所以可能存在問(wèn)題,但是程序所用步驟和程序原理都是與原程序相同,對(duì)于初步接觸的同行具有一定的借鑒和參考意義。
import pandas as pd import datetime def load_Data(): #加載數(shù)據(jù) df0 = pd.read_csv("Path/power.csv",index_col='user_id') df0['record_date'] = pd.to_datetime(df0['record_date']) return df0 #把datetime轉(zhuǎn)成字符串 def datetime_toString(dt): return dt.strftime("%Y-%m-%d") #把字符串轉(zhuǎn)成datetime def string_toDatetime(string): return datetime.strptime(string, "%Y-%m-%d") #缺失值處理,插值替換 def data_Full(): df1 = load_Data() #加載數(shù)據(jù) date_start = df1.iloc[0, 0] #初始時(shí)間 df1_date = df1['record_date'].tolist() #數(shù)據(jù)日期轉(zhuǎn)為列表 df1_data = df1[ 'value'].tolist() #數(shù)據(jù)值轉(zhuǎn)為列表 act = 365 #實(shí)際期望日期序列長(zhǎng)度 for j in range(0, len(df1_date)): if len(df1_date) < act: date0 = date_start date_s = datetime_toString(date0) #日期轉(zhuǎn)換為字符串類型,使日期可進(jìn)行邏輯比較 date_i = df1_date[j] #順序選取數(shù)據(jù)中日期列表里對(duì)應(yīng)各日期 date_is = datetime_toString(date_i) while date_is != date_s: #如數(shù)據(jù)中日期列表與期望日期序列不相等,即存在缺失值執(zhí)行while程序 nada = (df1_data[j] + df1_data[j+1]) / 2 #計(jì)算缺失處左右相鄰插值 adda = [date0, nada] date_da = pd.DataFrame(adda).T date_da.columns = df1.columns df1 = pd.concat([df1, date_da]) #將缺失日期加入數(shù)據(jù)列表中 date0 += datetime.timedelta(days=1) #日期加一 date_s = datetime_toString(date0) #日期字符串轉(zhuǎn)日期時(shí)間類型 date0 += datetime.timedelta(days=1) #日期加一 date_s = datetime_toString(date0) #日期字符串轉(zhuǎn)日期時(shí)間類型 df1 = df1.sort_values(by=['record_date']) return df1
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python學(xué)習(xí)筆記之lambda表達(dá)式用法詳解
這篇文章主要介紹了Python學(xué)習(xí)筆記之lambda表達(dá)式用法,結(jié)合實(shí)例形式詳細(xì)分析了lambda表達(dá)式的概念、功能、原理、組成及相關(guān)使用技巧,需要的朋友可以參考下2019-08-08pygame實(shí)現(xiàn)雷電游戲雛形開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)雷電游戲開(kāi)發(fā)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Python字典查找數(shù)據(jù)的5個(gè)基礎(chǔ)操作方法
Python字典是另一種可變?nèi)萜髂P?且可存儲(chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型,下面這篇文章主要給大家介紹了關(guān)于Python字典查找數(shù)據(jù)的5個(gè)基礎(chǔ)操作方法,需要的朋友可以參考下2022-06-06Python手拉手教你爬取貝殼房源數(shù)據(jù)的實(shí)戰(zhàn)教程
隨著人工智能的不斷發(fā)展,機(jī)器學(xué)習(xí)這門技術(shù)也越來(lái)越重要,很多人都開(kāi)啟了學(xué)習(xí)機(jī)器學(xué)習(xí),本文就介紹了機(jī)器學(xué)習(xí)的基礎(chǔ)內(nèi)容,了解python爬蟲(chóng),本文給大家分享Python爬取貝殼房源數(shù)據(jù)的實(shí)戰(zhàn)教程,感興趣的朋友一起學(xué)習(xí)吧2021-05-05Python使用pandas導(dǎo)入csv文件內(nèi)容的示例代碼
這篇文章主要介紹了Python使用pandas導(dǎo)入csv文件內(nèi)容,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12使用Django啟動(dòng)命令行及執(zhí)行腳本的方法
今天小編就為大家分享一篇使用Django啟動(dòng)命令行及執(zhí)行腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python Pygame實(shí)戰(zhàn)之打地鼠小游戲
Pygame庫(kù)是專門為了幫助做出的游戲和其他多媒體應(yīng)用Python編程語(yǔ)言的一個(gè)開(kāi)放源代碼模塊。本文將利用Pygame模塊制作一個(gè)打地鼠的小游戲,快跟隨小編一起學(xué)習(xí)一下吧2022-01-01