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

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

這樣不就可以出來我想要的結果了嗎~
說干就干,先來填充一個日期序列了來~
#?習慣性導入包
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

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

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

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

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

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