Pandas案例精进 | 无数据记录的日期如何填充?

共 1318字,需浏览 3分钟

 ·

2022-04-28 17:03


因业务需要,每周需要统计每天提交资源数量,但提交时间不定,可能会有某一天或者某几天没有提,那么如何将没有数据的日期也填充进去呢?

如上图所示,就缺少2021-09-04、2021-09-05、2021-09-08三天的数据,需要增加其记录并设置提交量为0。

实战

刚开始我用的是比较笨的方法,直接复制到Excel,手动将日期往下偏移,差哪天补哪天,次数多了就累了,QAQ~如果需要一个月、一个季度、一年的数据呢?这样一个一个手动偏移,还没开始淦就已经被吓趴下了~

所以,我就开始想,有没有什么方法可以补上日期。

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

接着就开始导入有提交数据的表。

df = pd.read_excel("提交表.xlsx")
df

dt表出来了,提交表df也出来,想要实现目的,直接左连接即可。

df_new = pd.merge(dt,df,how='left',on="日期")
df_new

结果,报错了

果然,df的日期格式是object类型,而dt是日期格式~

所以,要把df的日期也改成对应的格式才能join。

解决问题

如何将series 的object类型的日期改成日期格式呢?

infer_datetime_format这个参数设置为True 就可以了,Pandas将会尝试转换为日期类型。

具体语法如下所示:

df["日期"] = pd.to_datetime(df["日期"], infer_datetime_format=True)

另外,我还百度过设置errors 参数为 ='coerce'。Pandas会遇到不能转换的数据就会赋值为NaN,但这个方法并不太适用于我这个需求。

df_new = pd.merge(dt, df, how='left', on="日期")
df_new

NaN有点不舒服,可以设置为0,这样就看着顺眼点啦~

df_new['搜狗提交量']=df_new['搜狗提交量'].fillna(0)
df_new

这样就可以完成了,我每次需要十几分钟的工作。

以上就是我关于Pandas在工作上的分享,希望能帮助到大家。

下载练习数据:https://www.lanzoui.com/iBAhpv8ym4j

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

点击下方阅读原文可获得更好的阅读体验

Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报