Pandas案例精進(jìn) | 無數(shù)據(jù)記錄的日期如何填充?
因業(yè)務(wù)需要,每周需要統(tǒng)計(jì)每天提交資源數(shù)量,但提交時(shí)間不定,可能會(huì)有某一天或者某幾天沒有提,那么如何將沒有數(shù)據(jù)的日期也填充進(jìn)去呢?

如上圖所示,就缺少2021-09-04、2021-09-05、2021-09-08三天的數(shù)據(jù),需要增加其記錄并設(shè)置提交量為0。
實(shí)戰(zhàn)
剛開始我用的是比較笨的方法,直接復(fù)制到Excel,手動(dòng)將日期往下偏移,差哪天補(bǔ)哪天,次數(shù)多了就累了,QAQ~如果需要一個(gè)月、一個(gè)季度、一年的數(shù)據(jù)呢?這樣一個(gè)一個(gè)手動(dòng)偏移,還沒開始淦就已經(jīng)被嚇趴下了~
所以,我就開始想,有沒有什么方法可以補(bǔ)上日期。
der,為了不讓自己太累,點(diǎn)子就有了。

這樣不就可以出來我想要的結(jié)果了嗎~
說干就干,先來填充一個(gè)日期序列了來~
#?習(xí)慣性導(dǎo)入包
import?pandas?as?pd
import?numpy?as?np
import?time,datetime
#?填充日期序列
dt?=?pd.DataFrame(pd.date_range("2021-9-3",?periods=7,freq='D'))?
dt.columns?=?["日期"]?
dt

接著就開始導(dǎo)入有提交數(shù)據(jù)的表。
df?=?pd.read_excel("提交表.xlsx")
df

dt表出來了,提交表df也出來,想要實(shí)現(xiàn)目的,直接左連接即可。
df_new?=?pd.merge(dt,df,how='left',on="日期")
df_new
結(jié)果,報(bào)錯(cuò)了

果然,df的日期格式是object類型,而dt是日期格式~
所以,要把df的日期也改成對應(yīng)的格式才能join。
解決問題
如何將series 的object類型的日期改成日期格式呢?
將infer_datetime_format這個(gè)參數(shù)設(shè)置為True 就可以了,Pandas將會(huì)嘗試轉(zhuǎn)換為日期類型。
具體語法如下所示:
df["日期"]?=?pd.to_datetime(df["日期"],?infer_datetime_format=True)
另外,我還百度過設(shè)置errors 參數(shù)為 ='coerce'。Pandas會(huì)遇到不能轉(zhuǎn)換的數(shù)據(jù)就會(huì)賦值為NaN,但這個(gè)方法并不太適用于我這個(gè)需求。
df_new?=?pd.merge(dt,?df,?how='left',?on="日期")
df_new

看NaN有點(diǎn)不舒服,可以設(shè)置為0,這樣就看著順眼點(diǎn)啦~
df_new['搜狗提交量']=df_new['搜狗提交量'].fillna(0)
df_new

這樣就可以完成了,我每次需要十幾分鐘的工作。
以上就是我關(guān)于Pandas在工作上的分享,希望能幫助到大家。
下載練習(xí)數(shù)據(jù):https://www.lanzoui.com/iBAhpv8ym4j
我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請持續(xù)關(guān)注Python實(shí)用寶典。
有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問。
原創(chuàng)不易,希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!
點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗(yàn)
Python實(shí)用寶典?(pythondict.com)
不只是一個(gè)寶典
歡迎關(guān)注公眾號:Python實(shí)用寶典
