我有一个DataFrame,它包含去年的数据,但日期列缺少一些日期
date
0 2019-10-21
1 2019-10-29
2 2019-11-01
3 2019-11-04
4 2019-11-05
我想创建一个日期间隔的字典,所以关键字是开始日期,值是结束日期,类似于:
dates_gaps = {2019-10-21:2019-10-29, 2019-10-29:2019-11-01,2019-11-01:2019-11-04 ...}
所以我创建了一个列来指示是否与以下内容存在差距:
df['missing_dates'] = df[DATE].diff().dt.days > 1
其输出以下内容:
# True indicates if there's a gap or not
0 2019-10-21 False
1 2019-10-29 True
2 2019-11-01 True
3 2019-11-04 True
4 2019-11-05 False
我在这里遇到了麻烦
您可以添加比较缺失值的条件,通过Series.dt.strftime
将date
列转换为字符串,最后使用zip
:创建字典
diff = df['date'].diff()
s = df.loc[(diff.dt.days > 1) | diff.isna(), 'date'].dt.strftime('%Y-%m-%d')
print (s)
0 2019-10-21
1 2019-10-29
2 2019-11-01
3 2019-11-04
Name: date, dtype: object
d = dict(zip(s, s.shift(-1)[:-1]))
print (d)
{'2019-10-21': '2019-10-29', '2019-10-29': '2019-11-01', '2019-11-01': '2019-11-04'}
只需将这些日期转换为datetime
,并找出两个相邻日期之间的差异。
a = pd.to_datetime('1900-01-01', format='%Y-%m-%d')
b = pd.to_datetime('1900-02-01', format='%Y-%m-%d')
c = a-b
c.days # -31