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

2021-10-18 17:35:08 浏览数 (2)

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

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

实战

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

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

der,为了不让自己太累,点子就有了。

这样不就可以出来我想要的结果了吗~

说干就干,先来填充一个日期序列了来~

代码语言:javascript复制
# 习惯性导入包
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

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

代码语言:javascript复制
df = pd.read_excel("提交表.xlsx")
df

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

代码语言:javascript复制
df_new = pd.merge(dt,df,how='left',on="日期")
df_new

结果,报错了

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

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

解决问题

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

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

具体语法如下所示:

代码语言:javascript复制
df["日期"] = pd.to_datetime(df["日期"], infer_datetime_format=True)

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

代码语言:javascript复制
df_new = pd.merge(dt, df, how='left', on="日期")
df_new

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

代码语言:javascript复制
df_new['搜狗提交量']=df_new['搜狗提交量'].fillna(0)
df_new

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

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

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

0 人点赞